同时调用retrofit get方法NetworkonMainThreadException

时间:2014-09-25 12:44:58

标签: android

当我调用retrofit get方法时,我得到android.os.networkonMainThread这些异常 任何人都可以帮助这个。 这是get方法

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

在我班上

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

3 个答案:

答案 0 :(得分:1)

如文档中所述,如果您的方法具有返回类型,则它是同步完成的(即在主线程上)。 要异步运行请求,请将其返回void并在方法中添加retrofit.Callback类型的参数,如下所示:

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

答案 1 :(得分: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
 }
 }

答案 2 :(得分:-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();