2011-11-16 14 views
6

मुझे अपने एंड्रॉइड एप्लिकेशन के माध्यम से ग्राफ एपीआई तक पहुंचने में समस्या है जो उपयोगकर्ता के दोस्तों को JSONObject के रूप में पुनर्प्राप्त करता है, उनके नाम निकालता है और उन्हें स्क्रीन पर प्रदर्शित करता है। यह एक सरल और सीधा काम माना जाता है लेकिन स्पष्ट रूप से यह नहीं है। जब मैं एंड्रॉइड नेक्सस I पर अपना एप्लिकेशन चलाता हूं, तो मैं फेसबुक पर लॉगिन करता हूं, फिर मुझसे पूछा जाता है कि मैं अनुमति देने के लिए "अनुमति दें" बटन पर क्लिक करता हूं और मुझे रिक्त पृष्ठ पर रीडायरेक्ट किया जाता है। मुझे अपने दोस्तों का नाम देखने की उम्मीद है लेकिन ऐसा नहीं होता है। क्या कोई मेरी सहायता कर सकता है।एंड्रॉइड एप्लिकेशन के माध्यम से फेसबुक दोस्तों तक नहीं पहुंच सकता

public class Login extends Activity 
{ 
    Facebook mFacebook = new Facebook("201509899926116"); 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook); 
    String FILENAME = "AndroidSSO_data"; 
    private SharedPreferences mPrefs; 
    View linearLayout; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     linearLayout = findViewById(R.id.main_layout); 

     /* 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) 
     { 
      mFacebook.setAccessToken(access_token); 
     } 
     if(expires != 0) 
     { 
      mFacebook.setAccessExpires(expires); 
     } 

     /* Only call authorize if the access_token has expired. */ 
     if(!mFacebook.isSessionValid()) 
     { 
      mFacebook.authorize(this, new String[] {"user_birthday","email", 
        "user_relationships","user_religion_politics","user_hometown", 
        "user_location","user_relationship_details","user_education_history", 
        "user_likes","user_interests", "user_activities"}, 
        new DialogListener() 
      { 

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

        /* access the graph API */ 
        Log.d("Facebook-Example-Friends Request", "Started API request"); 
        mAsyncRunner.request("me/friends", new FriendsRequestListener()); 
        Log.d("Facebook-Example-Friends Request", "Finished API request"); 
       } 

       @Override 
       public void onFacebookError(FacebookError error) {} 

       @Override 
       public void onError(DialogError e) {} 

       @Override 
       public void onCancel() {} 
      }); 
     } 
    } 

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

    public class FriendsRequestListener implements com.facebook.android.AsyncFacebookRunner.RequestListener 
    { 
     /** 
     * Called when the request to get friends has been completed. 
     * Retrieve and parse and display the JSON stream. 
     */ 
     public void onComplete(final String response) 
     { 
      try 
      { 
       // process the response here: executed in background thread 
       Log.d("Facebook-Example-Friends Request", "response.length(): " + response.length()); 
       Log.d("Facebook-Example-Friends Request", "Response: " + response); 

       final JSONObject json = new JSONObject(response); 
       JSONArray d = json.getJSONArray("data"); 
       int l = (d != null ? d.length() : 0); 
       Log.d("Facebook-Example-Friends Request", "d.length(): " + l); 

       for (int i=0; i<l; i++) 
       { 
        JSONObject o = d.getJSONObject(i); 
        String n = o.getString("name"); 
        String id = o.getString("id"); 

        TextView tv = new TextView(Login.this); 
        tv.setText(n); 
        ((LinearLayout) linearLayout).addView(tv); 
       }    
      } 
      catch (JSONException e) 
      { 
       Log.w("Facebook-Example", "JSON Error in response"); 
      } 
     } 
    } 
} 
+0

जब आप डीबग कर रहे हैं, यह वास्तव में मित्र अनुरोध श्रोता पर onComplete कॉलबैक विधि हिट करता है? –

+0

अरे, अगर मेरे उत्तर ने इसे ठीक करने में मदद की है, तो आपको इसे स्वीकृत उत्तर के रूप में चिह्नित करना चाहिए (उत्तर के बगल में स्थित चेक मार्क पर क्लिक करके) –

उत्तर

2

मुझे लगता है कि मुझे यह समस्या मिल सकती है .. ऑन द कॉम्पलेट पर दस्तावेज़ के अनुसार;

 /** 
    * Called when a request completes with the given response. 
    * 
    * Executed by a background thread: do not update the UI in this method. 
    */ 

और आप अपने यूआई अद्यतन करने के लिए है, तो addViews वास्तव में यूआई धागा पर परिलक्षित नहीं मिलता कोशिश कर रहे हैं .. आप अपने गतिविधि में एक विधि है कि आप runOnUIThread साथ onComplete से कॉल कर सकते हैं बनाना चाहिए .. की तरह कुछ इस;

runOnUiThread(new Runnable() { 
      public void run() { 
       inserFacebookNames(facebookContactNames); 
      } 
     }); 

.. मुझे पता है कि अगर यह वास्तव में यह ठीक करता है चलो .. मुझे लगता है कि अगर कारण था उत्सुक हूँ

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। यह निश्चित है! – NewToAndroid

+0

शायद आपको इस उत्तर को स्वीकार किए जाने के बाद चिह्नित करना चाहिए? आप हरे रंग की चेक मार्क पर क्लिक करके ऐसा कर सकते हैं। – Silox

संबंधित मुद्दे