1

我收到错误“执行 doInBackground() 时发生错误”

这是我的 ASyncTask 类:

private class ASyncPollServer extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... params) {
        String pollResult = "";
        if(((ChatApplication) _instance.getApplication()).isPolling() == false){
        ((ChatApplication) _instance.getApplication()).setPolling(true);
        pollResult = ((ChatApplication) _instance.getApplication()).GetConnectionManager().PollServer();
    }
        return pollResult;
        }

    @Override
    protected void onPostExecute(String result) {
        if(result != ""){
            HandlePollResult(result);
            ((ChatApplication) _instance.getApplication()).setPolling(false);
        }

    }

}

我的 TimerTask 称之为:

private Handler handler = new Handler();
public class ServerPollTimer extends TimerTask {
    private Runnable runnable = new Runnable() {
        public void run() {
            ExecutePollServer();
        }
    };

    public void run() {
        handler.post(runnable);
        }
    }

还有我的 ExecutePollServer 方法:

private void ExecutePollServer(){
    ASyncPollServer task = new ASyncPollServer();
    task.execute();
}

我在 OnCreate() 中调用计时器的地方:

new Timer().schedule(new ServerPollTimer() , 0, 5000);

这是我的堆栈跟踪:

05-30 09:46:16.020: E/AndroidRuntime(340): FATAL EXCEPTION: AsyncTask #1
05-30 09:46:16.020: E/AndroidRuntime(340): java.lang.RuntimeException: An error occured while executing doInBackground()
05-30 09:46:16.020: E/AndroidRuntime(340):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
05-30 09:46:16.020: E/AndroidRuntime(340):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
05-30 09:46:16.020: E/AndroidRuntime(340):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
05-30 09:46:16.020: E/AndroidRuntime(340):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
05-30 09:46:16.020: E/AndroidRuntime(340):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
05-30 09:46:16.020: E/AndroidRuntime(340):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
05-30 09:46:16.020: E/AndroidRuntime(340):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
05-30 09:46:16.020: E/AndroidRuntime(340):  at java.lang.Thread.run(Thread.java:1019)
05-30 09:46:16.020: E/AndroidRuntime(340): Caused by: java.lang.IllegalStateException: No wrapped connection.
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.impl.conn.AbstractClientConnAdapter.assertValid(AbstractClientConnAdapter.java:163)
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:269)
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:119)
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:421)
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-30 09:46:16.020: E/AndroidRuntime(340):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-30 09:46:16.020: E/AndroidRuntime(340):  at chatclient.utility.HttpPostNetworkUtility.PerformPost(HttpPostNetworkUtility.java:43)
05-30 09:46:16.020: E/AndroidRuntime(340):  at chatclient.utility.ConnectionManager.ExecuteCommand(ConnectionManager.java:213)
05-30 09:46:16.020: E/AndroidRuntime(340):  at chatclient.utility.ConnectionManager.PollServer(ConnectionManager.java:192)
05-30 09:46:16.020: E/AndroidRuntime(340):  at chatclient.namespace.MainWindowActivity$ASyncPollServer.doInBackground(MainWindowActivity.java:402)
05-30 09:46:16.020: E/AndroidRuntime(340):  at chatclient.namespace.MainWindowActivity$ASyncPollServer.doInBackground(MainWindowActivity.java:1)

任何帮助将不胜感激!

谢谢!

4

1 回答 1

0

这个答案建议你应该ThreadSafeClientConnManager在你的pollResult = ((ChatApplication) _instance.getApplication()).GetConnectionManager().PollServer();.

我也会用初始化或类似((ChatApplication) _instance.getApplication())的成员变量替换。onPreExecute

于 2012-05-30T00:28:04.543 回答