2012-03-22 4 views
0

android-facebook-sdk를 사용하고 있으며 프로필 정보를 요청하려고합니다. 그러나 나는 대답을 되돌릴 수 없다. keytool을 사용하여 키 해시를 생성하고 Facebook 앱 설정에 붙여 넣었습니다. 또한 코드에 앱 ID를 추가했습니다. 문제는 프로파일 정보 나 정보를 전혀 얻을 수 없다는 것입니다.Android facebook 그래프 요청

public class StartingPoint extends Activity { 

    Facebook facebook = new Facebook("actual app id"); 
    String FILENAME = "AndroidSSO_data"; 
    private SharedPreferences mPrefs; 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 


    Button btnt; 

    /* 
    * On Create 
    * */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     /* 
     * button Test 
     * */ 
     btnt = (Button) findViewById(R.id.btntallinn); 
     btnt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getProfileInformation(); 
      } 
     }); 

     /* 
     * Get existing access_token if any 
     */ 
     mPrefs = getPreferences(MODE_PRIVATE); 
     String access_token = mPrefs.getString("access_token", null); 
     long expires = mPrefs.getLong("access_expires", 0); 
     if (access_token != null) { 
      facebook.setAccessToken(access_token); 
     } 
     if (expires != 0) { 
      facebook.setAccessExpires(expires); 
     } 

     /* 
     * Only call authorize if the access_token has expired. 
     */ 
     if (!facebook.isSessionValid()) { 

      facebook.authorize(this, new String[] { "email", 
        "publish_checkins", "rsvp_event", "manage_pages", 
        "publish_stream", "user_likes", "user_groups" }, 

      new DialogListener() { 
       @Override 
       public void onComplete(Bundle values) { 
        SharedPreferences.Editor editor = mPrefs.edit(); 
        editor.putString("access_token", facebook.getAccessToken()); 
        editor.putLong("access_expires", 
          facebook.getAccessExpires()); 
        editor.commit(); 


       } 

       @Override 
       public void onFacebookError(FacebookError error) { 
       } 

       @Override 
       public void onError(DialogError e) { 
       } 

       @Override 
       public void onCancel() { 
       } 

      }); 

     } 
    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     facebook.extendAccessTokenIfNeeded(this, null); 
    } 


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

     facebook.authorizeCallback(requestCode, resultCode, data); 
     } 


    public void getProfileInformation() { 

     mAsyncRunner.request("me", new RequestListener() { 

      @Override 
      public void onComplete(String response, Object state) { 
       Log.d("Profile", response); 
       String json = response; 

       try { 
        JSONObject profile = new JSONObject(json); 
        // getting name of the user 
        final String name = profile.getString("name"); 
        // getting email of the user 
        final String email = profile.getString("email"); 

        runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show(); 
         } 

        }); 

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

      @Override 
      public void onIOException(IOException e, Object state) { 
      } 

      @Override 
      public void onFileNotFoundException(FileNotFoundException e, 
        Object state) { 
      } 

      @Override 
      public void onMalformedURLException(MalformedURLException e, 
        Object state) { 
      } 

      @Override 
      public void onFacebookError(FacebookError e, Object state) { 
      } 
     }); 
    } 
} 

로그 캣 :

03-22 09:38:13.545: D/Profile(23833): {"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}} 
03-22 09:38:13.545: W/System.err(23833): org.json.JSONException: No value for name 
03-22 09:38:13.545: W/System.err(23833): at org.json.JSONObject.get(JSONObject.java:354) 
03-22 09:38:13.545: W/System.err(23833): at org.json.JSONObject.getString(JSONObject.java:510) 
03-22 09:38:13.545: W/System.err(23833): at com.tana.tallinn.tartu.StartingPoint$3.onComplete(StartingPoint.java:172) 
03-22 09:38:13.545: W/System.err(23833): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:254) 

답변

1

오류는 액세스 토큰을 필요하지 않습니다 말한다. facebook.getaccesstoken()을 인쇄하고 유효한 토큰이 있는지 확인하십시오.이 토큰을 사용하면 브라우저에서 프로필 정보를 가져올 수 있습니다.