2013-03-27 62 views
0

我在做一些网络运营和你知道与蜂窝他们应该在另一个线程来完成,而不是UIthread否则它给networkmainthread错误。在我的情况下,我必须从API获取返回值,并使用它做一些事情,所以我决定使用Callable。我正在发送一个请求,并在call()方法中获得响应,但最终它仍然给我造成了网络主线程错误。我应该在哪里犯错?任何建议将非常感激。可赎回和Networkmainthread错误

private static <T> T getReader(String url, List<NameValuePair> params, final Class<T> classOfT, final Context _context) { 

    T result = null; 
    RestApiHelper apiHelper = new RestApiHelper(url, params, _context); 
    ExecutorService executor = Executors.newFixedThreadPool(10); 
    Future<Reader> futureSubmit = executor.submit(apiHelper); 

    try { 
     Reader reader = futureSubmit.get(); 
     if (reader != null){ 
      result = new Gson().fromJson(reader, classOfT); //I'm getting the exception at this line. 
      . 
      . 
      . 


//********************************************* 
//call method of RestApiHelper class which implemented Callable 
//********************************************* 
@Override 
public Reader call() throws Exception { 
    Reader reader = null; 
    if(fileUri==null) 
     reader = executeNormalPost(); 
    else 
     reader = executeSendFilePost(); 

    return reader; 
} 

回答

0

如果您正在进行网络操作,我会建议使用AsyncTask。最好处理联网操作。

+0

我说我一定要得到的响应值,并用它做什么,这将嵌套地恢复。异步不能解决问题。另一方面,callable正在另一个线程中执行该过程。我无法理解的是为什么我得到这个错误,怎么能在mainthread上运行? – 2013-03-27 18:25:38