2014-04-09 2 views
0

나는 안드로이드에서 초보자입니다. Android에 Facebook을 통합했습니다. 응용 프로그램이 잘 작동하지만 언젠가는 다음과 같은 오류가 발생하면 충돌이 발생합니다. 다음과 같이 내 페이스 북 통합 코드는 다음과 같습니다내 Facebook이 Android 앱과 통합 된 이유는 무엇입니까?

(자) Login.class

public class Login extends Activity { 
private static final String URL_PREFIX_FRIENDS = "https://graph.facebook.com/me/friends?access_token="; 
private ImageButton buttonLoginLogout; 
public static final String PREFS_PRIVATE = "PREFS_PRIVATE"; 
private Button b; 

private Session.StatusCallback statusCallback = new SessionStatusCallback(); 
Databasehandler db=new Databasehandler(this); 
HashMap<String, String>map=new HashMap<String, String>(); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 
    buttonLoginLogout = (ImageButton)findViewById(R.id.imageButton1); 



    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

    Session session = Session.getActiveSession(); 
    if (session == null) { 
     if (savedInstanceState != null) { 
      session = Session.restoreSession(this, null, statusCallback, savedInstanceState); 
     } 
     if (session == null) { 
      session = new Session(this); 
     } 
     Session.setActiveSession(session); 
     if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
      session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
     } 
    } 

    updateView(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    Session.getActiveSession().addCallback(statusCallback); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    Session.getActiveSession().removeCallback(statusCallback); 
} 



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

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    Session session = Session.getActiveSession(); 
    Session.saveSession(session, outState); 
} 
@Override 
protected void onDestroy() { 

    super.onDestroy(); 

} 
private void updateView() { 
    Session session = Session.getActiveSession(); 
    if (session.isOpened()) { 
     Request.executeMeRequestAsync(session,new Request.GraphUserCallback() { 

      @Override 
      public void onCompleted(GraphUser user, Response response) { 
       // TODO Auto-generated method stub 
       final String t1=user.getId(); 
       final String t2=user.getName(); 
       // SharedPreferences myPrefs =getSharedPreferences("myprefs",MODE_WORLD_READABLE); 
       int count=db.getme(); 
       if(count==0) 
       { 
       map.put("uid",t1.toString()); 
       map.put("name",t2.toString()); 
       db.insertnewuser(map); 
       } 
    } 
     }); 

    Intent ik=new Intent(Login.this,MainActivity.class); 

     ik.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
     startActivity(ik); 
     } else { 

     buttonLoginLogout.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { onClickLogin(); } 
     }); 
    } 
} 

private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    if (!session.isOpened() && !session.isClosed()) { 
     session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
    } else { 
     Session.openActiveSession(this, true, statusCallback); 
    } 
} 
private class SessionStatusCallback implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     updateView(); 
    } 
} 
} 

오류 로그 :

04-09 01:59:15.200: E/AndroidRuntime(5726): FATAL EXCEPTION: main 
04-09 01:59:15.200: E/AndroidRuntime(5726): Process: com.smacon.task, PID: 5726 
04-09 01:59:15.200: E/AndroidRuntime(5726): java.lang.NullPointerException 
04-09 01:59:15.200: E/AndroidRuntime(5726): at com.smacon.task.Login$1.onCompleted(Login.java:355) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at com.facebook.Request$1.onCompleted(Request.java:269) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at com.facebook.Request$4.run(Request.java:1669) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at android.os.Handler.handleCallback(Handler.java:733) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at android.os.Handler.dispatchMessage(Handler.java:95) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at android.os.Looper.loop(Looper.java:136) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at java.lang.reflect.Method.invokeNative(Native Method) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at java.lang.reflect.Method.invoke(Method.java:515) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-09 01:59:15.200: E/AndroidRuntime(5726): at dalvik.system.NativeStart.main(Native Method) 
+0

무엇이'Login.java : 355'입니까? – nikis

+0

최종 문자열 t1 = user.getId(); –

답변

0

onCompleted 콜백에서 user 변수의 값은 어떤 이유로 null입니다. 당신이 documentation에 살펴 보겠습니다 경우는 말한다 : usernull인지 아닌지

user The GraphObject representing the returned user, or null 

그래서 당신은 항상 확인해야합니다. 나는 Facebook SDK에 익숙하지 않아서 왜 null이 될 수 있는지 말할 수는 없지만 같은 방법으로 제공되는 Response 오브젝트에 관한 유용한 정보를 얻을 수있을 것이라고 생각됩니다.

관련 문제