Facebook登录和注销无法重启

问题描述 投票:0回答:1

我使用Facebook SDK 3.0编写我的代码。登录facebook后,我想获得一些信息。

示例:(获取用户名,电子邮件或ID等)

我的程序第一次可以运行并获取此信息。

但如果我在手机上关闭我的程序而我想重新启动它,它会显示一些错误。

@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
public class MainActivity extends Activity implements OnClickListener {
    ImageView FBLogin,Pic;
    TextView show;
    Facebook facebook;
    SharedPreferences sp;
    @SuppressLint("NewApi")
    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //facebook key
        sp = getPreferences(MODE_PRIVATE);
        String token_access = sp.getString("token_access", null);
        long expires = sp.getLong("access_expires", 0);
        show = (TextView)findViewById(R.id.textView1);
        if (token_access != null) {
            facebook.setAccessToken(token_access);
            Log.e("token","1");
        }
        if (expires != 0) {
            facebook.setAccessExpires(expires);
            Log.e("expires","2");
        }
        String app_id = getString(R.string.App_id);
        facebook = new Facebook(app_id);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        FBLogin = (ImageView)findViewById(R.id.imageView1);
        Pic = (ImageView)findViewById(R.id.pic);
        FBLogin.setOnClickListener(this);
        updata();

    }

//update Btn Picture
    private void updata() {
        // TODO Auto-generated method stub
        if (facebook.isSessionValid()) {
            FBLogin.setImageResource(R.drawable.logout_button);
            Pic.setVisibility(ImageView.VISIBLE);
            JSONObject obj = null;
            URL img_url = null;

            try {
                String jsonUser = facebook.request("me");
                obj = Util.parseJson(jsonUser);
            } 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();
            }   
            String id = obj.optString("id");
            String name = obj.optString("name");
            String email = obj.optString("email");
            show.setText(id+"\n"+email+"\n"+name);

            } else {
                FBLogin.setImageResource(R.drawable.login_button);
                Pic.setVisibility(ImageView.INVISIBLE);
            }
    }
//Btn login facebook
    @SuppressWarnings("deprecation")
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        if (facebook.isSessionValid()) {

            try {
                facebook.logout(getApplicationContext());
                updata();

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            facebook.authorize(this,new String[] {"email","publish_stream"}, new DialogListener() {  
                @Override
                   public void onComplete(Bundle values) {
                    Editor Ed = sp.edit();
                    Ed.putString("token_access", facebook.getAccessToken());
                    Ed.putLong("expires", facebook.getAccessExpires());
                    Ed.commit();
                    updata();
                    Log.e("Login","onComplete");
                   } //Login Success
                @Override
                   public void onFacebookError(FacebookError error) {
                    Log.e("Login","onFacebookError");
                   }

                @Override
                   public void onError(DialogError e) {
                    Log.e("Login","onError");
                   }

                @Override
                    public void onCancel() {
                    Log.e("Login","onCancel"); 
                }


            });
        }

    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.e("Login","5");
        facebook.authorizeCallback(requestCode, resultCode, data);
    }


}

对不起,我忘了我的错误日志,这是我的错误日志

04-03 15:52:49.630: E/AndroidRuntime(28590): FATAL EXCEPTION: main
04-03 15:52:49.630: E/AndroidRuntime(28590): Process: com.faccbooktest, PID: 28590
04-03 15:52:49.630: E/AndroidRuntime(28590): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.faccbooktest/com.faccbooktest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.android.Facebook.setAccessToken(java.lang.String)' on a null object reference
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2411)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.ActivityThread.access$800(ActivityThread.java:144)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.os.Handler.dispatchMessage(Handler.java:102)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.os.Looper.loop(Looper.java:155)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.ActivityThread.main(ActivityThread.java:5696)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at java.lang.reflect.Method.invoke(Native Method)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at java.lang.reflect.Method.invoke(Method.java:372)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
04-03 15:52:49.630: E/AndroidRuntime(28590): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.android.Facebook.setAccessToken(java.lang.String)' on a null object reference
04-03 15:52:49.630: E/AndroidRuntime(28590):    at com.faccbooktest.MainActivity.onCreate(MainActivity.java:62)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.Activity.performCreate(Activity.java:5958)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
04-03 15:52:49.630: E/AndroidRuntime(28590):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
04-03 15:52:49.630: E/AndroidRuntime(28590):    ... 10 more
android facebook-login
1个回答
1
投票

你的facebook对象还没有实例化,你必须调用它,

facebook = new Facebook(app_id);

在这之前,

facebook.setAccessToken(token_access);
© www.soinside.com 2019 - 2024. All rights reserved.