【问题标题】:Android: AsyncTask - onPostExecuteAndroid:AsyncTask - onPostExecute
【发布时间】:2014-08-03 02:00:30
【问题描述】:

请帮忙,我有这段代码,但出现了问题。

public class AdvertShowDetail extends Activity {
public String advert_id;
public TextView advert_title;
public LinearLayout advert_table;

public JSONParser jParser = new JSONParser();
public JSONArray Events   = null;

public String item_name;
public ProgressDialog pDialog;
public Object item_title;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_advert_show_detail);

    final ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setTitle("Advert");

    Intent intent   = getIntent();
    Bundle extras   = intent.getExtras();
    advert_id       = extras.getString("ITEM_ID");
    advert_title    = (TextView) findViewById(R.id.textView1);

    new LoadAdvertInfo().execute();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //getMenuInflater().inflate(R.menu.advert_show_detail, menu);
    return true;
}

class LoadAdvertInfo extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(AdvertShowDetail.this);
        pDialog.setMessage("Načítám detaily inzerátu.");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    protected String doInBackground(String... args) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json            = jParser.makeHttpRequest("http://192.168.2.200/app/?type=get_advert_detail&id="+advert_id, "GET", params);
        try {
            int success = json.getInt("success");

            if (success == 1) {
                Events = json.getJSONArray("item");
                for (int i = 0; i < Events.length(); i++) {
                    JSONObject evt = Events.getJSONObject(i);

                    item_name = evt.getString("name");
                    Log.e("Advert", item_name);
                }
            } else {
                //
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        Log.e("Test", item_name);
        advert_title.setText("Test");
        pDialog.dismiss();
    }
}

}

在此应用程序中,应用程序在加载活动时崩溃。 但如果 advert_title.setText("Test"); 移除活动加载正常。当我不以这种方式工作时,我在 TextView 中编写文本有何不同?

提前感谢您的帮助。

【问题讨论】:

  • 显示您的 xml,来自您的 cmets findViewById(R.id.textView1) 必须返回 null。否则向我们展示您的 LogCat 堆栈跟踪
  • 非常感谢,我完全忘记了这个变量没有在布局中定义。我真的要睡觉吗:D 真可惜:(

标签: android android-activity android-asynctask


【解决方案1】:

尝试通过以下方式将 advert_title 传递给您的 AsyncTask:

    new LoadAdvertInfo(advert_title).execute();

并在您的 LoadAdvertInfo 类中添加一个构造函数。

或者,您可以将它传递给执行。

【讨论】:

    【解决方案2】:

    如果我没记错的话,您不应该在运行 AsyncTask 时更新用户界面 (UI),因为 AsyncTask 在不同的线程而不是 UI 线程(有时称为主线程)上工作。看到你初始化了你的textView,在你调用new LoadAdvertInfo().execute();之后尝试把你的advert_title.setText("Test");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多