2012-02-02 74 views
13

我有一個AsyncTask,它使用來自Internet的已解析數據填充自定義列表。如何從Android中的PostExecute正確啓動活動?

在PostExecute中填充該列表並準備好將其轉移到新的活動中。

我做這種方式:

@Override 
protected void onPostExecute(List<VideoDataDescription> result) 
{ 
    super.onPostExecute(result); 
    MainActivity.progressDialog.dismiss(); 

    context.startActivity(new Intent(context, ResultsQueryActivity.class)); 


} 

其中上下文

private Context context; 

在logcat中執行此代碼後,我收到了顯示java.lang.NullPointerException。 這是可能的和正確的開始一個活動,因爲我這樣做?

UPD 我已經加入

private Context mContext; 


public YoutubeAndYahooParser(Context context) 
{ 
    super(); 
    this.mContext = context; 
} 

初始化上下文和調用

YoutubeAndYahooParser youtubeAndYahooParser = new YoutubeAndYahooParser(ResultsQueryActivity.this); 
        youtubeAndYahooParser.execute("my string to pass in asynctak"); 

在此之後在PostExecute

Intent intent = new Intent(mContext, ResultsQueryActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
mContext.startActivity(intent);  

我增添了新的標誌,因爲我有在LogCat中下一個:

*從Activity上下文外調用startActivity()需要FLAG_ACTIVITY_NEW_TASK標誌。這真的是你想要的嗎?*

對嗎?

+2

你是怎麼初始化'context'的? – Vladimir 2012-02-02 18:47:33

+0

似乎是,沒有。如何初始化上下文? – 2012-02-02 19:04:27

+0

看到dhaag23的回答 – Vladimir 2012-02-02 19:14:49

回答

32

您應該傳遞應用程序上下文,而不是本地活動的上下文。即使用context.getApplicationContext()並將其保存在AsyncTask子類中的局部變量中。

的代碼可能看起來是這樣的:

public class MyAsyncTask extends AsyncTask { 

    Context context; 
    private MyAsyncTask(Context context) { 
     this.context = context.getApplicationContext(); 
    } 

    @Override 
    protected Object doInBackground(Object... params) { 
     ... 
    } 

    @Override 
    protected void onPostExecute(List<VideoDataDescription> result) { 
     super.onPostExecute(result); 
     MainActivity.progressDialog.dismiss(); 

     context.startActivity(new Intent(context, ResultsQueryActivity.class)); 
    } 
} 

你這樣稱呼它:

new MyAsyncTask(context).execute(); 
+0

請問,你可以添加來代碼如何做到這一點? 我更新了關於細節的主題。 – 2012-02-02 20:52:34

+0

已更新爲代碼。 – dhaag23 2012-02-02 23:10:43

+1

On'new MyAsyncTask(context).execute();'上下文從哪裏來? – dotty 2012-07-02 11:50:21

16

我想這只是現在......它工作在PostExecute方法!

Intent intent_name = new Intent(); 
intent_name.setClass(getApplicationContext(),DestinationClassName.class); 
startActivity(intent_name); 
相關問題