从AsyncTask调用另一个活动

时间:2013-04-21 06:51:09

标签: java android android-asynctask android-activity

我是Android的新手,我对此代码有疑问。我正在尝试获取JSON字符串并启动另一个活动以将其显示为ListView 我无法开始这项活动。它表示 构造函数Intent(RequestJsonString,Class)未定义 构造函数Intent(RequestJsonString,Class)未定义 < / strong>。

下面: Intent intent = new Intent(RequestJsonString.this,DisplayResults.class); 和这里: RequestJsonString.this.startActivity(intent);

我已经在stackoverflow上阅读了很多帖子,并尝试使用activitycontextthis。但我仍然没有做对。我想我应该错过一些东西。任何帮助表示赞赏。

public class RequestJsonString extends AsyncTask<String, Void, JSONObject> {

@Override
protected JSONObject doInBackground(String... urls) {
    // Code HTTP Get Request and get JSONObject
            return jsonObject;
}

protected void onPostExecute(JSONObject jsonObj){
    try {

        Intent intent = new Intent(RequestJsonString.this,DisplayResults.class);
        intent.putExtra("JSON_Object", jsonObj.toString());
        RequestJsonString.this.startActivity(intent);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Log.v("Json_OutPut","Done");

}

}

2 个答案:

答案 0 :(得分:2)

  

从AsyncTask开始活动。

Intent intent = new Intent(YourActivityName.this,DisplayResults.class);

或者你可以像下面那样做。

声明context实例变量并在onCreate方法中初始化它。

private Context context;
public void onCreate(Bundle bundle) {
   ............
   context = this;
   ........
}

像这样开始活动。

Intent intent = new Intent(context,DisplayResults.class);
intent.putExtra("JSON_Object", jsonObj.toString());
startActivity(intent);

答案 1 :(得分:1)

在您的情况下,您指的是asynctask类上下文

Intent intent = new Intent(RequestJsonString.this,DisplayResults.class);

使用活动上下文

Intent intent = new Intent(ActivityName.this,DisplayResults.class);

检查链接以了解何时使用getApplicationContext()以及何时使用活动上下文

When to call activity context OR application context?

编辑:

将Activity上下文传递给asynctask构造函数

 new RequestJsonString(ActivityName.this).execute(params..);

在asynctask构造函数中

 Context c;
 public  RequestJsonString( Context context)
 {
        c= context;
 }

然后

   Intent intent = new Intent(c,DisplayResults.class);
   startActivity(intent);