0

我想更新文本视图,来自 AsycTask 的微调器。实际上我在做什么

我从服务器获取数据并以 json 形式返回结果,然后我解析 JSON 并将数据填充到两个 Spinner 和一个 textview 中。当我使用 Asyctask 时如何更新数据,因为 Textview 不更新..这是我的代码

TAG_CONFIG = "xyz"
TAG_CONFIG1 = "yyy"
JSONParser jParser = null;
JSONObject json = null;
jParser = new JSONParser();
json = jParser.getJSONFromUrl(url);

try {
    // Getting Array of Contacts
    contacts = json.getJSONArray(TAG_CONFIG);
    for (int i = 0; i < contacts.length(); i++) {
        JSONArray c = contacts.getJSONArray(i);
        CompanyName = new String[c.length()];
        for (int j = 0; j < c.length(); j++) {
            CompanyName[j] = c.getString(j);
        }


    }

tab_confg1 类似...

4

3 回答 3

2

doInBackground未与主 UI 线程同步...因此,您无法通过此方法直接更新您的 UI(您必须使用HandlerormContext.runOnUiThread()代替)。但是,您可以从 更新您的 UI onPostExecute,因为此方法是在 UI 线程上执行的。

于 2012-07-02T16:04:22.840 回答
0

尝试这个...

1.每当我们在 Android 中启动应用程序时,我们都会从 Dedicated UI Thread 开始

2. 任何线程的创建都会从 UI 线程中删除一个。

3.保持UI工作在UI线程中,Non-UI工作在Non-UI线程是可取的,但随着HoneyComb Android版本的发布,它继续成为规则。

4.虽然非 UI 线程可用于使用处理程序将工作从它发布到 UI 线程,但 Android 提供了 AsyncTask,它有助于将非 UI 线程上完成的工作同步回 UI 线程

异步任务<>

---> doInBackground() 将处理非 UI 工作。

---> PostExectue()将帮助将非 UI 工作发布回 UI 线程。

于 2012-07-02T16:29:06.100 回答
0

使用runOnUiThreaddoInBackground.

@Override
protected String doInBackground(Void... params) {
    Activity_Name.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    // your code here to access UI elements

                }
            });
  return "string";
}
于 2012-07-02T16:11:27.117 回答