2012-08-14 85 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

相关问题