1

我有一个接收 JSON 响应以显示在 UI 上的活动。我的请求是这样的。

public void onClick(View click) {
    if (click == profBtn) {
       //this line creates the post request on my RequestHandler class.
       requestHandler.setURL(url);
       Intent it = new Intent(MainActivity.this, ProfActivity.class);
    startActivity(it);
    } else if....

这是我的 OnCreate 方法在我的 ProfActivity 中的样子

    TextView tv;
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.prof_activity);

            //this command gets the data from the JSON Response from my mapper class.The JSON Response was converted to a HashMap.
            mapData=MapperClass.map;

    String value=mapData.get("key");
        tv = (TextView) findViewById(R.id.textView1);
        tv.setText(value);
}

setText 命令导致 NullPointerException。发出请求、接收响应、将响应映射到 hashmap 并将映射的值传递给 ProfActivity 工作正常。这里的问题是 JSON 响应有点晚了。在要显示的数据到达之前已经执行了 Oncreate 方法。

知道如何告诉我的活动等待数据吗?

4

2 回答 2

0

不要让你ProfActivity等待,你应该只在请求完成时启动它。将 startActivity 代码放在postExecute异步任务方法的末尾。

对我来说,我还将网络请求部分移到其中ProfActivity,这样您就不需要通过公共变量访问结果。

于 2013-11-04T03:10:26.710 回答
0

如果你坚持使用activity,那么请使用startActivityForResult,并将解析和 setText 部分放在onActivityResult. 此外,AsyncTask可能是更好的选择。

于 2013-11-04T03:38:27.587 回答