Update UIElement from AsycTask



我想更新文本视图,来自AsycTask的微调器。

我从服务器获取数据并以 json 形式返回结果,然后我解析 JSON 并在两个微调器和一个文本视图中填充数据。当我使用 Asyctask 时如何更新数据,因为文本视图不更新。.这是我的代码狙击

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...

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

使用 runOnUiThread 从 doInBackground 的非 UI 线程访问 UI。

@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";
}

试试这个...

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

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

3. 建议在 UI 线程中保持 UI 工作,在非 UI 线程中保持非 UI 工作,但这样做 随着HoneyComb Android版本的发布,继续成为规则。

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

AsyncTask 中<>

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

---> PostExectue() 将有助于将 NON-UI 工作发布回 UI 线程。

最新更新