2014-09-25 2 views
0

, когда я звоню в метод доработки, я получаю android.os.networkonMainThread. Это исключение может кто-нибудь помочь в этом. это метод прибудетпри вызове метода дооснащения getto NetworkonMainThread Exception

@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

+0

На самом деле модификация будет работать на фоне потока. это будет означать это. пост работает с написанием любой темы. в методе get я получаю это исключение. – user3860944

ответ

1

Как указано в документации, если ваш метод имеет типа возвращаемого значения, это делается синхронно (то есть. В основном потоке) , Чтобы запустить запрос асинхронно, сделать его вернуть void и добавить параметр типа retrofit.Callback в ваш метод, следующим образом:

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

Поскольку вы делаете работу сети на mainUI нити. Чтобы этого избежать, вам нужно выполнить сетевую операцию в AsyncTask или рабочем потоке (Background).

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 
} 
} 
Смежные вопросы