2013-07-01 62 views
0

我需要做些什麼來獲取當前登錄的用戶的userId,Facebook個人資料圖片,emailid和地址。如何訪問AsyncTask中的Facebook方法

一旦應用程序授權的用戶登錄我會打電話給下面的異步任務的方法,但它失敗並引發異常: -

「android.os.NetworkOnMainThreadException」

請看看在方法我在執行中的AsyncTask doInBackground(): -

private void callFBMethods() { 

    try { 
     response = facebook.request("/me"); 
     if(response!=null) 
     { 
      handler.sendEmptyMessage(0); 
     } 
     JSONObject json = Util.parseJson(response); 
     mainURL = Constant.FB_PIC_URL+json.getString("id")+"/picture?type=small"; 
     //To registere new user here 
     Vector<Object> userData = new Vector<Object>(); 
     userData.add(Constant.CURRENT_FLAG); 

     userData.add(json.getString("username")); 
     userData.add(json.getString("name")); 
     userData.add(json.getString("id")); 
     userData.add(mainURL); 

     new AsynServices(mActivity, userData, 4).execute(); 
    } catch (Exception e) { 
     // TODO: handle exception 
     System.out.println("exception occurs:-"+e.getMessage()); 
    } 

} 

回答

0

NetworkOnMainThreadException這個錯誤,因爲在Android API 14起,你必須運行Internet相關的代碼應該在的AsyncTask。像這樣你可以在AsyncTask中運行你的代碼

private class Task extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected String doInBackground(String... urls) { 

     // call your methods from here 

     try { 
     response = facebook.request("/me"); 
     if(response!=null) 
     { 
      handler.sendEmptyMessage(0); 
     } 
     JSONObject json = Util.parseJson(response); 
     mainURL = Constant.FB_PIC_URL+json.getString("id")+"/picture?type=small"; 
     //To registere new user here 
     Vector<Object> userData = new Vector<Object>(); 
     userData.add(Constant.CURRENT_FLAG); 

     userData.add(json.getString("username")); 
     userData.add(json.getString("name")); 
     userData.add(json.getString("id")); 
     userData.add(mainURL); 

     // instead of calling another Asynctask here just write related code here. 

     new AsynServices(mActivity, userData, 4).execute(); 

    } catch (Exception e) { 
     // TODO: handle exception 
     System.out.println("exception occurs:-"+e.getMessage()); 
    } 
    } 
} 
+0

是的,我做了同樣的工作,但它沒有工作,看到我在doInBackground方法中運行的代碼。謝謝。 –

+0

你的代碼在背景中做什麼 –

+0

看看我更新的答案,你會對此有所瞭解。 –