2012-10-23 41 views
4

您好我工作的Facebook API。我已經通過Facebook的文檔和編碼指示在它下面的代碼在Android 2.1-3.2工作正常,但在Android 4.0.4運行時,它給出了一個錯誤android.os.networkonmainthread。我不知道如何使用AsynckTask或線程(無痛線程)寫下面的代碼。請在這裏的任何人建議我如何編碼,以便它可以在android的所有versiosn上執行。這裏是我的代碼。Facebook的SDK編碼爲Android 2.2不工作在Android 4.0.4,顯示錯誤android.os.Networkonmainthread

public class Facebook4 extends Activity { 

    public static final String mAPP_ID = "222299217893177"; 

    public Facebook mFacebook = new Facebook(mAPP_ID); 
    private static final String FACEBOOK_PERMISSION = "publish_stream"; 
    private SharedPreferences mPrefs; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_facebook4); 
     ((ImageView)findViewById(R.id.facebookLogin)).setOnClickListener(loginButtonListener); 
     SessionStore.restore(mFacebook, this); 
    } 

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

    private OnClickListener loginButtonListener = new OnClickListener() { 
     public void onClick(View v) { 
      if(!mFacebook.isSessionValid()) { 
       Toast.makeText(Facebook4.this, "Authorizing", Toast.LENGTH_SHORT).show(); 
       mFacebook.authorize(Facebook4.this, new String[] {FACEBOOK_PERMISSION},Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener()); 
       //startActivity(new Intent(FacebookLogin.this,MainActivity.class)); 
      } 
      else { 
       Toast.makeText(Facebook4.this, "Has valid session", Toast.LENGTH_SHORT).show(); 
       try { 
        JSONObject json = Util.parseJson(mFacebook.request("me")); 
        String facebookID = json.getString("id"); 
        String firstName = json.getString("first_name"); 
        String lastName = json.getString("last_name");     
        Toast.makeText(Facebook4.this, "You already have a valid session, " + firstName + " " + lastName + ". No need to re-authorize.", Toast.LENGTH_SHORT).show(); 
      } 
      catch(Exception error) { 
       Toast.makeText(Facebook4.this, error.toString(), Toast.LENGTH_SHORT).show(); 
       } 
      } 
     //startActivity(new Intent(FacebookLogin.this,MainActivity.class)); 
     } 
    }; 

    public final class LoginDialogListener implements DialogListener { 
     public void onComplete(Bundle values) { 
     try { 
     //The user has logged in, so now you can query and use their Facebook info 
     JSONObject json = Util.parseJson(mFacebook.request("me")); 
     Log.i("id", json.getString("id")); 
     Log.i("FirstName", json.getString("first_name")); 
     Log.i("lastname", json.getString("last_name")); 
     Log.i("email", json.getString("email")); 
     Log.i("Name", json.getString("name")); 
     Log.i("gender",json.getString("gender")); 

     SessionStore.save(mFacebook, Facebook4.this); 

     } 
     catch(Exception error) { 
     Toast.makeText(Facebook4.this, error.toString(), Toast.LENGTH_SHORT).show(); 
     Log.i("error", error.toString()); 
     } 
     } 

     public void onFacebookError(FacebookError error) { 
      Toast.makeText(Facebook4.this, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show(); 
      } 
      public void onError(DialogError error) { 
      Toast.makeText(Facebook4.this, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show(); 
      } 
      public void onCancel() { 
      Toast.makeText(Facebook4.this, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show(); 
      } 
    } 

回答

1

您正在接收此錯誤是因爲您正在執行網絡操作,例如在主UI線程上訪問Facebook。

要解決這個問題的最好方式,將所有與網絡相關的代碼放到一個單獨的ThreadAsyncTask

0

在更高的API現在你不能做網絡相關的任務在主線程。在其他線程中運行您的代碼並且異常不會到來。

3

我有同樣的問題,我做什麼,是當我檢查器我的表現是這樣的

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> 

我刪除了targetSdkVersion

<uses-sdk 
    android:minSdkVersion="8" 
    /> 

和它的工作,我認爲它會幫助你嘗試

+0

刪除爲我工作。謝謝 –