可调用和网络主线程错误

时间:2013-03-27 16:13:28

标签: android multithreading executorservice future callable

我正在进行一些网络操作,正如你所知,蜂窝应该在另一个线程上完成而不是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;   
}

1 个答案:

答案 0 :(得分:0)

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