2015-04-03 31 views
0

我使用Facebook SDK 3.0編寫我的代碼。 Afte登錄Facebook,我想獲得一些信息。Facebook登錄和註銷無法重新啓動

例子:(獲取用戶名,電子郵件或編號等)

我的程序第一次可以運行並得到這個信息。

但如果我關閉我的手機上的程序,我想重新啓動它, 它會顯示一些錯誤。

@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 
+1

你wrot e:「它會顯示一些錯誤」。請說明錯誤是什麼。 – 2015-04-03 06:42:39

+0

Pkst日誌請 – Sid 2015-04-03 06:42:41

+0

我很抱歉忘了上傳我的ErrorLog,現在我上傳完成。 – 2015-04-03 07:59:19

回答

1

您Facebook的對象還沒有被實例化,你要調用此方法,

facebook = new Facebook(app_id); 

之前這,

facebook.setAccessToken(token_access); 
+1

感謝您的幫助 – 2015-04-04 16:40:51