새 앱에 대한 테스트를하는 동안 문제가 있습니다. asynctask를 실행하여 내 서버와 통신하고 json 파일을 요청하는 활동이 있습니다.asynctask from handler android
주기적으로이 파일을 다운로드하고 싶습니다 (3 ~ 4 초). 그래서 매번 활동을 처리하기 위해 처리기를 만들었습니다.
그것은 로그와 잘 작동하지만 AsyncTask를 실행하려고 할 때마다, 그것은 예외 말이 있습니다 :
02-19 10:16:41.510: WARN/System.err(9051): java.lang.IllegalStateException: Cannot execute task: the task is already running.
02-19 10:16:41.510: WARN/System.err(9051): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:576)
02-19 10:16:41.510: WARN/System.err(9051): at android.os.AsyncTask.execute(AsyncTask.java:535)
02-19 10:16:41.510: WARN/System.err(9051): at com.mobile.myPacket.mySecondActivity.askForData(mySecondActivity.java:68)
02-19 10:16:41.510: WARN/System.err(9051): at com.mobile.myPacket.mySecondActivity.access$000(mySecondActivity.java:22)
02-19 10:16:41.510: WARN/System.err(9051): at com.mobile.myPacket.mySecondActivity$1.run(mySecondActivity.java:56)
02-19 10:16:41.510: WARN/System.err(9051): at android.os.Handler.handleCallback(Handler.java:733)
02-19 10:16:41.510: WARN/System.err(9051): at android.os.Handler.dispatchMessage(Handler.java:95)
02-19 10:16:41.510: WARN/System.err(9051): at android.os.Looper.loop(Looper.java:136)
02-19 10:16:41.510: WARN/System.err(9051): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-19 10:16:41.510: WARN/System.err(9051): at java.lang.reflect.Method.invokeNative(Native Method)
02-19 10:16:41.510: WARN/System.err(9051): at java.lang.reflect.Method.invoke(Method.java:515)
02-19 10:16:41.510: WARN/System.err(9051): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-19 10:16:41.510: WARN/System.err(9051): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-19 10:16:41.510: WARN/System.err(9051): at dalvik.system.NativeStart.main(Native Method)
내가 다른 스레드이고 두 번째 호출이 첫 번째 문제를하고 있기 때문에 생각을 . 하지만 어떻게 해결해야할지 모르겠다.
package com.mobile.myPacket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.mobile.clases.AsyncResponse;
import com.mobile.clases.MyTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class SecondActivity extends Activity implements AsyncResponse {
private String urlServer = "url";
MyTask asyncTask =new MyTask();
Handler handler = new Handler();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler.post(sendData);
setContentView(R.layout.secondActivity);
asyncTask.delegate = this;
//We ask for data the first time
askForData();
}
@Override
public void processFinish(JSONArray output) { //Executed from asyncTask
//Data received
Log.i("TEST", output.toString());
}
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacks(sendData);
}
private final Runnable sendData = new Runnable(){
public void run(){
try {
//prepare and send the data here..
askForData();
//Log.i("TEST","aa");
handler.postDelayed(this, 3000);
}
catch (Exception e) {
e.printStackTrace();
}
}
};
private void askForData(){
Log.i("TEST","askForData");
asyncTask.execute(urlServer+"test.php");
}
}
핸들러없이, AsyncTask를 잘 한 시간을 작동합니다
이
내 활동이다. 그래서 그 수업은 괜찮아요.
당신은 사람이며, 다음과 같이하십시오. 그것은 작동합니다. 나는이 일에 대해 생각하고 있었다. – Biribu