2014-09-25 62 views
0

當我打電話改造獲取方法我得到android.os.networkonMainThread這些異常 可以任何一個幫助。 這是get方法同時調用改造獲取方法NetworkonMainThread異常

@GET("/advice/{id}") 
    User GetUser(@Path("id") int userid); 

,並在我的課

restAdapter = RestAdapterManager.getInstance(); 
    getuser = restAdapter.create(GetUser.class); 
User user= getuser .GetUser(30). 
+0

這是因爲您正在主線程上執行後臺網絡操作。所以避免使用'AsyncTask'或'Thread'這個異常。實際改裝後的 – Piyush 2014-09-25 12:47:15

+0

將在後臺線程上運行。它會考慮到這一點。職位正在寫出任何線程。在get方法中,我得到這個異常。 – user3860944 2014-09-25 12:50:20

回答

1

如文檔中說,如果你的方法有一個返回類型,它是同步完成的(即主線程) 。 異步運行的要求,使其返回voidretrofit.Callback類型的參數添加到您的方法,如下:

void GetUser(@Path("id") int userid, retrofit.Callback<User> user); 
-1

因爲你在mainUI線程執行網絡操作。爲避免這種情況,您必須在AsyncTask或工作線程(後臺)上執行網絡操作。

public class MyTask extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected Void doInBackground(Void... params) { 
      restAdapter = RestAdapterManager.getInstance(); 
      getuser = restAdapter.create(GetUser.class); 
      User user= getuser .GetUser(30); 
      return null; 
     } 
    } 

,並在你的活動onCreate(),叫AsyncTask如,

new MyTask().execute(); 
0

該錯誤意味着你需要你的網絡操作在後臺線程,對於這一點,你可以使用的AsyncTask

private class DownloadFilesTask extends AsyncTask<String, Void, User> { 
@Override 
protected Bitmap doInBackground(String... urls) { 
     restAdapter = RestAdapterManager.getInstance(); 
    getuser = restAdapter.create(GetUser.class); 
    User user= getuser .GetUser(30). 
     return user; 
} 
@Override 
protected void onPostExecute(User user) { 
    //DO your UI tasks here 
} 
} 
相關問題