0

ダンプ (マップ) から json データを取得しようとしています。アイデアは、アクティビティが起動されたときにバックグラウンド スレッドが Json データを読み取ってダンプすることです。これで、UI スレッドが実行され、ArrayList がダンプ データから更新されます。

私のコードは

Public class myclass extends ListActivity{

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    MyHandlerMethod();
ArrayList deals = new ArrayList(SessionStore.getFromDump("someData"));
}

MyHandlerMethod(){

//A handler thread
//Json parsing and adding data to dump runs here
 }

}

//Sessionstore クラスには getFromDump() メソッドがあり、内部にデータを格納するためのマップがあります。

// MyHandlerMethod が実行されると、このマップが更新されます。

しかし、UI スレッドが MyHandlerMethod() の前に実行されるたびに、SessionStore.getFromDump("someData") は null のままになります。

UI スレッドの前にハンドラー スレッドを確実に実行するにはどうすればよいですか。

リスト活動です。実際に私が望むのは、arraylist をダンプから更新する必要があり、その配列リストをリスト アクティビティに使用することです。

4

4 に答える 4

3

そのためにAsyncTaskを使用し、 onProgressUpdate / publishProgress および onPostExecute メソッドで UI を更新する必要があります。

http://developer.android.com/reference/android/os/AsyncTask.html

これがどのように機能するかの例を次に示します。

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {

     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]); // here you can for example update your progress bar, your textviews, whatever UI...
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }
于 2013-08-09T09:52:14.247 に答える
1

AsyncTask を使用してデータ データを取得し、UI スレッドを更新する必要があります。 参考はこちら。

于 2013-08-09T09:52:42.130 に答える
0

を使用したくない、または使用できない場合はAsyncTask、おそらくThread優先度などを指定する必要があります。

HandlerThreadthen 呼び出しを開始しgetLooper()て を取得し、それLooperを に渡して、Handlerそのスレッドでメッセージを受信して​​処理できるようにすることができます。

しかし、を使用するのAsyncTaskは簡単な解決策です。

于 2013-08-09T10:04:34.723 に答える