0

AsycTask.Actually からテキスト ビュー、スピナーを更新したい

サーバーからデータを取得し、json 形式で結果を返します。次に、JSON を解析し、2 つの Spinner と 1 つの textview にデータを入力します。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 と同様...

4

3 に答える 3

2

doInBackgroundはメインUIスレッドと同期されません...したがって、このメソッドからUIを直接更新することはできません(HandlerまたはmContext.runOnUiThread()代わりにまたはを使用する必要があります)。onPostExecuteただし、このメソッドはUIスレッドで実行されるため、からUIを更新できます。

于 2012-07-02T16:04:22.840 に答える
0

これを試して...

1. Androidでアプリを起動するときは常に、専用UIスレッドから起動します。

2.スレッドを作成すると、UIスレッドから1つドロップされます。

3. UIスレッドでのUI作業と、非UIスレッドでの非UI作業を維持することをお勧めしますが、HoneyCombAndroidバージョンのリリースではそれがルールになりました。

4.非UIスレッドを使用して、ハンドラーを使用してそのスレッドからUIスレッドに作業を投稿できますが、AndroidはAsyncTaskを提供します。これは、非UIスレッドで実行された作業をUIスレッドに同期するのに役立ちます。

AsyncTask <>で

---> doInBackground() は非UI作業を処理します。

---> PostExectue()は、UI以外の作業をUIスレッドにポストバックするのに役立ちます。

于 2012-07-02T16:29:06.100 に答える
0

の非 UI スレッドから UI にアクセスするには、 runOnUiThreadを使用しますdoInBackground

@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 に答える