Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
图形Api无法从Android中的Facebook SDK获取位置_Android_Facebook_Facebook Graph Api - Fatal编程技术网

图形Api无法从Android中的Facebook SDK获取位置

图形Api无法从Android中的Facebook SDK获取位置,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我在Android应用程序中使用Facebook SDK。我需要获得用户的所有信息。到现在为止,我能够得到的名称ID电子邮件生日和用户的个人资料图片。我需要得到的最后一个是用户的位置或当前位置。我正在使用下面的代码 if(fb.isSessionValid()){ button.setImageResource(R.drawable.logout_button); JSONObject obj = null; URL im

我在Android应用程序中使用Facebook SDK。我需要获得用户的所有信息。到现在为止,我能够得到的名称ID电子邮件生日和用户的个人资料图片。我需要得到的最后一个是用户的位置或当前位置。我正在使用下面的代码

if(fb.isSessionValid()){
            button.setImageResource(R.drawable.logout_button);

            JSONObject obj = null;
            URL img = null;


             try {
                    String jsonUser = fb.request("me");
                    obj = Util.parseJson(jsonUser);
                    String id = obj.optString("id");
                    String name = obj.optString("name");
                    String bday = obj.optString("birthday");
                    String address = obj.optString("location");
                    String email = obj.optString("email");
                    ((TextView) findViewById(R.id.txt)).setText("Welcome! "+name);
                    ((TextView) findViewById(R.id.txtbday)).setText("Birthday: "+bday);
                    ((TextView) findViewById(R.id.txtaddress)).setText("Address: "+address);
                    ((TextView) findViewById(R.id.txtemail)).setText("Email: "+email);
                    img = new URL("http://graph.facebook.com/"+id+"/picture?type=normal");
                    Bitmap bmp = BitmapFactory.decodeStream(img.openConnection().getInputStream());
                    pic.setImageBitmap(bmp);

                } catch (FacebookError e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



        }else{
            button.setImageResource(R.drawable.login_button);
        }
    }
这是权限

fb.authorize(MainActivity.this,new String[] {"email", "user_location", "user_birthday","publish_stream"}, new DialogListener() {

                public void onFacebookError(FacebookError e) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), ""+e, Toast.LENGTH_SHORT).show();   
                    e.printStackTrace();
                }

                public void onError(DialogError e) {
                    // TODO Auto-generated method stub
                    //Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();      
                }

                public void onComplete(Bundle values) {
                    // TODO Auto-generated method stub
                    Editor editor = sp.edit();
                    editor.putString("access_token", fb.getAccessToken());
                    editor.putLong("access_expires", fb.getAccessExpires());
                    editor.commit();
                    updateButtonImage();
                }

                public void onCancel() {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), "Cancel", Toast.LENGTH_SHORT).show();   
                }
            });
        }

感谢您在advanced中提供帮助。

Graph API Explorer工具是查看Graph API端点响应的一种很好的方法。只需通过单击“获取访问令牌”请求正确的权限(如
用户位置
),并查看“/me”的输出。当我获得具有
user\u location
权限的访问令牌时,我可以看到我的当前位置

要获取当前位置,请执行以下操作:

String currentCity = obj.getJSONObject("location").getString("name");
对于较新的SDK,您可以通过使用graph API对象传递以下内容来获取位置详细信息

graphObject.getInnerJSONObject().getJSONObject("location").getString("id"))

从这里下载源代码()

活动\u main.xml

<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">


    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/iv_image"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/profile"/>


    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Name"
            android:gravity="center_vertical"
            android:textSize="15dp"
            android:textColor="#000000"

            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:text="Name"
            android:textSize="15dp"
            android:id="@+id/tv_name"
            android:gravity="center_vertical"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>

    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <TextView
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:text="Email"
        android:gravity="center_vertical"
        android:textSize="15dp"
        android:layout_below="@+id/tv_name"
        android:textColor="#000000"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_below="@+id/tv_name"
        android:text="Email"
        android:gravity="center_vertical"
        android:textSize="15dp"
        android:id="@+id/tv_email"
        android:textColor="#000000"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="DOB"
            android:gravity="center_vertical"
            android:textSize="15dp"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_below="@+id/tv_name"
            android:text="DOB"
            android:gravity="center_vertical"
            android:textSize="15dp"
            android:id="@+id/tv_dob"
            android:layout_toRightOf="@+id/tv_email"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="Location"
            android:gravity="center_vertical"
            android:textSize="15dp"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_below="@+id/tv_name"
            android:text="location"
            android:gravity="center_vertical"
            android:textSize="15dp"
            android:id="@+id/tv_location"
            android:textColor="#000000"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"/>
    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:background="#6585C8"
        android:id="@+id/ll_facebook"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="40dp"
        android:layout_height="50dp">

        <ImageView
            android:layout_width="50dp"
            android:src="@drawable/facebook"
            android:id="@+id/iv_facebook"
            android:layout_height="50dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Login with Facebook"
            android:textSize="20dp"
            android:textColor="#FFFFFF"
            android:textStyle="bold"
            android:id="@+id/tv_facebook"
            android:layout_marginLeft="20dp"
            android:gravity="center"
            android:layout_gravity="center"

            />

    </LinearLayout>

    </LinearLayout>

MainActivity.java

package facebooklocation.facebooklocation;

import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.HttpMethod;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import org.json.JSONObject;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    CallbackManager callbackManager;
    ImageView iv_image, iv_facebook;
    TextView tv_name, tv_email, tv_dob, tv_location, tv_facebook;
    LinearLayout ll_facebook;
    String str_facebookname, str_facebookemail, str_facebookid, str_birthday, str_location;
    boolean boolean_login;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
        getKeyHash();
        listener();
    }


    private void init() {
        iv_image = (ImageView) findViewById(R.id.iv_image);
        iv_facebook = (ImageView) findViewById(R.id.iv_facebook);
        tv_name = (TextView) findViewById(R.id.tv_name);
        tv_email = (TextView) findViewById(R.id.tv_email);
        tv_dob = (TextView) findViewById(R.id.tv_dob);
        tv_location = (TextView) findViewById(R.id.tv_location);
        tv_facebook = (TextView) findViewById(R.id.tv_facebook);
        ll_facebook = (LinearLayout) findViewById(R.id.ll_facebook);
        FacebookSdk.sdkInitialize(this.getApplicationContext());
    }

    private void listener() {
        tv_facebook.setOnClickListener(this);
        ll_facebook.setOnClickListener(this);
        iv_facebook.setOnClickListener(this);

    }

    private void facebookLogin() {
        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.e("ONSUCCESS", "User ID: " + loginResult.getAccessToken().getUserId()
                        + "\n" + "Auth Token: " + loginResult.getAccessToken().getToken()
                );
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                try {

                                    boolean_login = true;
                                    tv_facebook.setText("Logout from Facebook");

                                    Log.e("object", object.toString());
                                    str_facebookname = object.getString("name");

                                    try {
                                        str_facebookemail = object.getString("email");
                                    } catch (Exception e) {
                                        str_facebookemail = "";
                                        e.printStackTrace();
                                    }

                                    try {
                                        str_facebookid = object.getString("id");
                                    } catch (Exception e) {
                                        str_facebookid = "";
                                        e.printStackTrace();

                                    }


                                    try {
                                        str_birthday = object.getString("birthday");
                                    } catch (Exception e) {
                                        str_birthday = "";
                                        e.printStackTrace();
                                    }

                                    try {
                                        JSONObject jsonobject_location = object.getJSONObject("location");
                                        str_location = jsonobject_location.getString("name");

                                    } catch (Exception e) {
                                        str_location = "";
                                        e.printStackTrace();
                                    }

                                    fn_profilepic();

                                } catch (Exception e) {

                                }
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, name, email,gender,birthday,location");

                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {
                if (AccessToken.getCurrentAccessToken() == null) {
                    return; // already logged out
                }
                new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
                        .Callback() {
                    @Override
                    public void onCompleted(GraphResponse graphResponse) {
                        LoginManager.getInstance().logOut();
                        LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email"));
                        facebookLogin();

                    }
                }).executeAsync();


            }

            @Override
            public void onError(FacebookException e) {
                Log.e("ON ERROR", "Login attempt failed.");


                AccessToken.setCurrentAccessToken(null);
                LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email,user_birthday"));
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        try {
            callbackManager.onActivityResult(requestCode, resultCode, data);
        } catch (Exception e) {

        }

    }

    private void getKeyHash() {
        // Add code to print out the key hash
        try {
            PackageInfo info = getPackageManager().getPackageInfo("facebooklocation.facebooklocation", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
    }

    private void fn_profilepic() {

        Bundle params = new Bundle();
        params.putBoolean("redirect", false);
        params.putString("type", "large");
        new GraphRequest(
                AccessToken.getCurrentAccessToken(),
                "me/picture",
                params,
                HttpMethod.GET,
                new GraphRequest.Callback() {
                    public void onCompleted(GraphResponse response) {

                        Log.e("Response 2", response + "");

                        try {
                            String str_facebookimage = (String) response.getJSONObject().getJSONObject("data").get("url");
                            Log.e("Picture", str_facebookimage);

                            Glide.with(MainActivity.this).load(str_facebookimage).skipMemoryCache(true).into(iv_image);

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                        tv_name.setText(str_facebookname);
                        tv_email.setText(str_facebookemail);
                        tv_dob.setText(str_birthday);
                        tv_location.setText(str_location);

                    }
                }
        ).executeAsync();
    }


    @Override
    public void onClick(View view) {

        if (boolean_login) {
            boolean_login = false;
            LoginManager.getInstance().logOut();
            tv_location.setText("");
            tv_dob.setText("");
            tv_email.setText("");
            tv_name.setText("");
            Glide.with(MainActivity.this).load(R.drawable.profile).into(iv_image);
            tv_facebook.setText("Login with Facebook");
        } else {
            LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email,user_birthday,user_location"));
            facebookLogin();
        }


    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        LoginManager.getInstance().logOut();
    }
}
package facebooklocation.facebooklocation;
导入android.content.Intent;
导入android.content.pm.PackageInfo;
导入android.content.pm.PackageManager;
导入android.content.pm.Signature;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Base64;
导入android.util.Log;
导入android.view.view;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入com.bumptech.glide.glide;
导入com.facebook.AccessToken;
导入com.facebook.CallbackManager;
导入com.facebook.facebook回调;
导入com.facebook.facebook异常;
导入com.facebook.FacebookSdk;
导入com.facebook.GraphRequest;
导入com.facebook.GraphResponse;
导入com.facebook.HttpMethod;
导入com.facebook.login.LoginManager;
导入com.facebook.login.LoginResult;
导入org.json.JSONObject;
导入java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
导入java.util.array;
公共类MainActivity扩展AppCompatActivity实现View.OnClickListener{
CallbackManager CallbackManager;
ImageView iv_图像,iv_facebook;
text查看电视名称、电视电子邮件、电视dob、电视位置、电视facebook;
线性布局的ll_facebook;
字符串str_facebook name、str_facebook email、str_facebook id、str_生日、str_位置;
布尔逻辑;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
getKeyHash();
监听器();
}
私有void init(){
iv_图像=(ImageView)findViewById(R.id.iv_图像);
iv_facebook=(ImageView)findViewById(R.id.iv_facebook);
tv_name=(TextView)findviewbyd(R.id.tv_name);
tv_email=(TextView)findviewbyd(R.id.tv_email);
tv_dob=(TextView)findviewbyd(R.id.tv_dob);
tv_位置=(TextView)findViewById(R.id.tv_位置);
tv_facebook=(TextView)findviewbyd(R.id.tv_facebook);
ll_facebook=(LinearLayout)findViewById(R.id.ll_facebook);
sdkinInitialize(this.getApplicationContext());
}
私有void侦听器(){
tv_facebook.setOnClickListener(这个);
ll_facebook.setOnClickListener(这个);
iv_facebook.setOnClickListener(本);
}
私有void facebookLogin(){
callbackManager=callbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
Log.e(“ONSUCCESS”,“用户ID:+loginResult.getAccessToken().getUserId())
+“\n”+“身份验证令牌:”+loginResult.getAccessToken().getToken()
);
GraphRequest请求=GraphRequest.NewMereRequest(loginResult.getAccessToken(),
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
试一试{
布尔值=真;
tv_facebook.setText(“从facebook注销”);
Log.e(“object”,object.toString());
str_facebookname=object.getString(“name”);
试一试{
str_facebookemail=object.getString(“电子邮件”);
}捕获(例外e){
str_facebookemail=“”;
e、 printStackTrace();
}
试一试{
str_facebookid=object.getString(“id”);
}捕获(例外e){
str_facebook id=“”;
e、 printStackTrace();
}
试一试{
str_birth=object.getString(“生日”);
}捕获(例外e){
str_birth=“”;
e、 printStackTrace();
}
试一试{
JSONObject JSONObject_location=object.getJSONObject(“位置”);
str_location=jsonobject_location.getString(“名称”);
}捕获(例外e)