首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用retrofit get方法时出现NetworkonMainThread异常

调用retrofit get方法时出现NetworkonMainThread异常
EN

Stack Overflow用户
提问于 2014-09-25 20:44:58
回答 3查看 190关注 0票数 0

当我调用retrofit get方法时,我得到了android.os.networkonMainThread,这些异常任何人都能帮上忙。这是get方法

代码语言:javascript
复制
@GET("/advice/{id}")
    User GetUser(@Path("id") int userid);

在我的班上

代码语言:javascript
复制
restAdapter = RestAdapterManager.getInstance();
    getuser =  restAdapter.create(GetUser.class);
User user=  getuser .GetUser(30). 
EN

回答 3

Stack Overflow用户

发布于 2014-09-25 20:49:37

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

代码语言:javascript
复制
void GetUser(@Path("id") int userid, retrofit.Callback<User> user);
票数 1
EN

Stack Overflow用户

发布于 2014-09-25 20:50:39

该错误意味着您需要在后台线程中执行网络操作,为此,您可以使用AsyncTask

代码语言:javascript
复制
 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
 }
 }
票数 0
EN

Stack Overflow用户

发布于 2014-09-25 20:50:30

因为您正在对mainUI线程执行网络操作。为了避免这种情况,您必须在AsyncTask或工作线程(后台)上执行网络操作。

代码语言:javascript
复制
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;
        }
    }

在你的activity onCreate()中,调用AsyncTask as,

代码语言:javascript
复制
new MyTask().execute();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26039010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档