当我调用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).
答案 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();