2012-08-14 87 views
2

Strangley,我的AsyncTask將執行onPreExecute而不是doInBackground()onPostExecute()。 Logcat沒有錯誤或消息表明出現問題。無法調用AsyncTask doInBackground()和onPostExecute

class LocationTask extends AsyncTask<String, Void, String>{ 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     Log.d(TAG, "onPreExecute============"); 
    } 

    @Override 
    protected String doInBackground(String... urls) { 
     Log.d(TAG, "doInBackground============"); 
     Log.d(TAG, "urls[0]:" + urls[0]); 
     return "test"; 
    } 

    @Override 
    protected void onPostExecute(String result){ 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     Log.d(TAG, "onPostExecute============"); 
    } 
} 

public class CsLocationTaskTest extends AndroidTestCase { 

    public void testExecute(){ 
     LocationTask task = new LocationTask(); 
     task.execute("my_test_url", null); 
    } 
} 

你看,是AsycTask沒什麼特別的,但和doInBackgroundonPostExecute沒有被調用兩種測試情況,在我Activity。我不明白髮生了什麼,請讓我明白什麼是錯的。謝謝。

+0

不要的TestCase使用 – 2012-08-14 00:32:52

+0

謝謝您的回答。我會搜索更多並嘗試不同的方式。 – sunghun 2012-08-14 00:58:48

回答

0

AsyncTask需要是CsLocationTaskTest的子類別。此外,你不需要null

每開發文檔:

"AsyncTask must be subclassed to be used. The subclass will override at least one method (doInBackground(Params...)), and most often will override a second one (onPostExecute(Result).)"

找到在:http://developer.android.com/reference/android/os/AsyncTask.html

試試這個:

public class CsLocationTaskTest extends AndroidTestCase { 

    public void testExecute(){ 
     LocationTask task = new LocationTask(); 
     task.execute("my_test_url"); 
    } 

    class LocationTask extends AsyncTask<String, Void, String>{ 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     Log.d(TAG, "onPreExecute============"); 
    } 

    @Override 
    protected String doInBackground(String... urls) { 
     Log.d(TAG, "doInBackground============"); 
     Log.d(TAG, "urls[0]:" + urls[0]); 
     return "test"; 
    } 

    @Override 
    protected void onPostExecute(String result){ 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     Log.d(TAG, "onPostExecute============"); 
    } 
} 


} 
+0

對不起,夥計。您的代碼無法正常工作。它仍然是一樣的。 AsyncTask應該在線程中測試。我使用InstrumentationTestCase類和runTestOnUiThread方法解決了這個問題。 – sunghun 2012-08-14 01:08:15

+1

這可能是,但你仍然需要子類'AsyncTask',如果你保持它的方式,它將永遠不會工作。只要確定何時使用它來構建應用程序,就可以子類AsyncTask。 – BlackHatSamurai 2012-08-14 01:12:02

相關問題