2012-02-02 17 views
13

私はAsyncTaskを持っています。これはインターネットからの解析されたデータでカスタムリストを埋めます。AndroidでPostExecuteから正しくアクティビティを開始するにはどうすればよいですか?

PostExecuteでは、私はそのリストを記入し、それを新しいアクティビティに転送する準備をします。

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

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


} 

文脈LogCatで

private Context context; 

このコードを実行した後、私はjava.lang.NullPointerExceptionが出ます:

私は、このようにそれを行います。 これは可能なのですが、アクティビティを開始するのは正しいですか?私は、コンテキストを初期化し、PostExecute

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

でこの後

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

を呼び出すために

private Context mContext; 


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

を追加した

UPD 私が持っているのので、私は新しいフラグを追加しましたLogCatで次の:

*アクティビティコンテキストの外部からstartActivity()を呼び出すには、FLAG_ACTIVITY_NEW_TASKフラグが必要です。これは本当にあなたが望むものですか?*

私はそうですか?

+2

どのように 'context'を初期化しましたか? – Vladimir

+0

と思われます。コンテキストを初期化するには? –

+0

dhaag23の回答を参照してください – Vladimir

答えて

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

どうぞ、どうやってコードを追加できますか? トピックを更新しました。 –

+0

コードで更新しました。 – dhaag23

+1

'新しいMyAsyncTask(コンテキスト).execute();'コンテキストはどこから来たのですか? – dotty

16

私はそれがPostExecute方法で動作します...今これを試してみました!

Intent intent_name = new Intent(); 
intent_name.setClass(getApplicationContext(),DestinationClassName.class); 
startActivity(intent_name); 
関連する問題