當單擊複選框時,我的應用程序執行一個異步任務。我不能得到它不止一次記錄一條消息。它在第一次點擊上完成,但不會再次完成。在環顧其他問題後,我確定我必須建立一個自定義類,當然還要調用新的MyAysncTask(我已經在做),但它仍然無法正常工作。創建新對象時Android異步任務不執行
這是在單擊複選框時執行的代碼。
cbJoining.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
new MyAsyncTask(EventID, cbJoining.isChecked(), URL_Race, sDates, sState).execute();
}
});
這裏是自定義類
class MyAsyncTask extends AsyncTask<Void, Void, Void>{
public String EventID;
public boolean bJoin;
public String URL_Race;
public String sDates;
public String sState;
public MyAsyncTask(String myEventID, boolean mybJoin, String myURL_Race, String mysDates, String mysState){
super();
EventID = myEventID;
bJoin = mybJoin;
URL_Race = myURL_Race;
sDates = mysDates;
sState = mysState;
}
protected void onPreExecute() {
};
@Override
protected Void doInBackground(Void... args) {
//Looper.prepare();
API oAPI = new API();
oAPI.Join(mPrefs, EventID, bJoin, URL_Race, sDates, sState);
Log.d("ASYNCTASK", URL_Race);
//Looper.loop();
return null;
}
protected void onPostExecute(Void result) {
Log.d("ASYNCTASK", "Finished");
};
}
這裏是異常: 十二月7日至16日:45:10.286:E/AndroidRuntime(28309):致命異常:的AsyncTask#2
07-16 12:45:10.286 E/AndroidRuntime(28309):java.lang.RuntimeException:執行doInBackground()時發生錯誤
07-16 12:45:10.286:E/AndroidRuntime(28309) :在andro id.os.AsyncTask $ 3.done(AsyncTask.java:299)
07-16 12:45:10.286:E/AndroidRuntime(28309):在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java: 352)
07-16 12:45:10.286:E/AndroidRuntime(28309):在java.util.concurrent.FutureTask.setException(FutureTask.java:219)
07-16 12:45: 10.286:E/AndroidRuntime(28309):在java.util.concurrent.FutureTask.run(FutureTask.java:239)
07-16 12:45:10.286:E/AndroidRuntime(28309):at android.os .AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)
12月7日至16日:45:10.286:E/AndroidRuntime(28309):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12月7日至16日:45:10.286: E/AndroidRuntime(28309):在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573)
07-16 12:45:10.286:E/AndroidRuntime(28309):at java.lang .Thread.run(Thread.java:856)
07-16 12:45:10.286:E/AndroidRuntime(28309):引起:java.lang.RuntimeException:無法在線程內創建處理程序稱爲Looper.prepare()
12月7日至16日:45:10.286:E/AndroidRuntime(28309):在android.os.Handler(Handler.java:197)
12月7日至16日:45:10.286:E/AndroidRuntime( 28309):at android.os.Handler。(Handler.java:111)
07-16 12:45:10.286:E/AndroidRuntime(28309):at android.app.Activity。(Activity.java:759 )
07-16 12:45:10.286:E/AndroidRuntime(28309):在com.chartermatrixllc.motocrossmatrix.API $ FB(API.java:88)
07-16 12:45: 10.286:E/AndroidRuntime(28309):在com.charter matrixllc.motocrossmatrix.API.Join(API.java:125)
07-16 12:45:10.286:E/AndroidRuntime(28309):at com.chartermatrixllc.motocrossmatrix.Race $ MyAsyncTask.doInBackground(Race。的java:207)
07-16 12:45:10.286:E/AndroidRuntime(28309):在com.chartermatrixllc.motocrossmatrix.Race $ MyAsyncTask.doInBackground(Race.java:1)
07-16 12:45:10.286:E/AndroidRuntime(28309):at android.os.AsyncTask $ 2.call(AsyncTask.java:287)
07-16 12:45:10.286:E/AndroidRuntime(28309):at java.util.concurrent.FutureTask.run(FutureTask.java:234)
12月7日至16日:45:10.286:E/AndroidRuntime(28309):... 4更
我不知道,如果這是你的問題,但是從這個代碼,我看不出有任何需要爲'Looper.prepare()'和'Looper.loop()'。如果你確實需要它,那麼你應該調用'Looper.quit()' – codeMagic
什麼是API類? – Desert