从AsyncTask更新UI元素

时间:2012-07-02 16:01:48

标签: android uielement

我想从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 ...

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

使用runOnUiThreaddoInBackground的非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";
}

答案 2 :(得分:0)

试试这个......

1。每当我们开始 Android中的应用时,我们从专用用户界线开始

<强> 2。创建任何线程都会将一个从UI线程中删除

3. 建议在UI线程中保持UI工作,非UI线程中的非UI工作是可取的,但它    随着HoneyComb Android版的发布,它成为了规则。

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

AsyncTask&lt;&gt;

---&GT; doInBackground()将处理非UI工作。

---&GT; PostExectue()将有助于将非UI工作发布回UI线程。