2012-02-02 24 views
13

Tôi có một AsyncTask, điền vào một Danh sách tùy chỉnh với dữ liệu được phân tích cú pháp từ Internet.Cách khởi động chính xác hoạt động từ PostExecute trong Android?

Trong bài đăngHãy thực hiện Tôi điền vào Danh sách đó và chuẩn bị sẵn sàng để chuyển nó sang một Hoạt động mới.

tôi làm điều đó theo cách này:

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

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


} 

nơi bối cảnh

private Context context; 

Trong LogCat sau khi thực hiện mã này tôi nhận được một Java.lang.NullPointerException. Điều này có thể và chính xác để bắt đầu Hoạt động khi tôi thực hiện không?

UPD Tôi đã thêm

private Context mContext; 


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

để khởi tạo bối cảnh và gọi

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

Sau này trong PostExecute

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

tôi thêm lá cờ mới vì tôi đã có trong LogCat tiếp theo:

* Gọi startActivity() từ bên ngoài ngữ cảnh Hoạt động yêu cầu cờ FLAG_ACTIVITY_NEW_TASK. Đây có phải là điều bạn thực sự muốn không? *

Tôi có đúng không?

+2

bạn đã khởi tạo 'ngữ cảnh' như thế nào? – Vladimir

+0

Dường như, không. Làm thế nào để khởi tạo ngữ cảnh? –

+0

xem câu trả lời của dhaag23 – Vladimir

Trả lời

32

Bạn nên chuyển sang ngữ cảnh ứng dụng thay vì ngữ cảnh từ hoạt động địa phương. I E. sử dụng context.getApplicationContext() và lưu nó trong một biến cục bộ trong lớp con AsyncTask của bạn.

Mã sức trông giống như sau:

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)); 
    } 
} 

bạn muốn gọi nó là như thế này:

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

Xin vui lòng, bạn có thể thêm vào mã làm thế nào để làm điều đó? Tôi đã cập nhật topicfor details. –

+0

Đã cập nhật bằng mã. – dhaag23

+1

Trên 'MyAsyncTask mới (ngữ cảnh) .execute();' ngữ cảnh đến từ đâu? – dotty

16

Tôi cố gắng này chỉ là bây giờ ... nó hoạt động trong PostExecute Phương pháp !!!

Intent intent_name = new Intent(); 
intent_name.setClass(getApplicationContext(),DestinationClassName.class); 
startActivity(intent_name); 
Các vấn đề liên quan