0

私はすべて AsyncTask で立ち往生しており、params、progress、result と混同しています。私のアプリケーションでは、ギャラリーに画像を表示する必要があります。URLはすべての画像で構成されています。これらの画像の URL を JSON 経由で取得し、応答を配列リストに保存して新しいアクティビティに渡します。ただし、「image_urls」という名前の配列リストに JSON 応答を保存できます。私はアンドロイドが初めてなので、バックグラウンドと非同期タスクでどのパラメーターを提供する必要があるか混乱しています。前もって感謝します。

以下は、私が作成した別のクラスです。doInBackground では、JSON を使用して必要なアイテムをフェッチしています。

public abstract  class Images1 extends AsyncTask<Void, Integer, Void>{
        private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR;
        private static String url = "http://www.ttt.com/album_pro/array_to_encode";

         ArrayList<String> urlList = new ArrayList<String>();
         JSONParser jParser = new JSONParser();
         ArrayList<String> image_urls = new ArrayList<String>();


         protected ArrayList<String>  doInBackground(Void... params) {
                 JSONObject json = jParser.getJSONFromUrl(url);

                    try{
                JSONObject seo = json.getJSONObject("SEO");
                JSONArray folio = seo.getJSONArray("Folio");

                JSONArray image_urls1 = new JSONArray();
                String s1=seo.getString("Folio");

                                for(int i=0;i<folio.length();++i)
                                {
                            String m = folio.getString(i);
                            Log.v("M"+i,m);
                            image_urls.add(m+ ",");

                                }
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
               return image_urls;
             }

             protected void onProgressUpdate(Integer... progress) {

             }


             protected void onPostExecute(String[] result) {

             }

    }
4

2 に答える 2

1

これを試して、

    public class GetTask extends AsyncTask<Void, Void, Integer> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        mPreogressDialog = ProgressDialog.show(Mainactivity.this,
                "Loading", "Please wait");
    }

    @Override
    protected Integer doInBackground(Void... params) {
        // TODO Auto-generated method stub
        //Do your stuff here call ur methods
                    imagedownload();
        return 0;
    }

    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
        // TODO Auto-generated method stub
        if (mPreogressDialog.isShowing())
            mPreogressDialog.dismiss();


    }

}

public vlid imagedownload(){
JSONObject json = jParser.getJSONFromUrl(url);

                try{
            JSONObject seo = json.getJSONObject("SEO");
            JSONArray folio = seo.getJSONArray("Folio");

            JSONArray image_urls1 = new JSONArray();
            String s1=seo.getString("Folio");

                            for(int i=0;i<folio.length();++i)
                            {
                        String m = folio.getString(i);
                        Log.v("M"+i,m);
                        image_urls.add(m+ ",");

                            }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
}
于 2013-03-06T09:20:20.927 に答える
1

http://developer.android.com/reference/android/os/AsyncTask.htmlを見ると、AsyncTask が非常にうまく説明されています。

でも、わからない場合は、試してみてください。

Android は、 UI スレッドと呼ばれる 1 つのスレッドを介してユーザー インターフェイスを変更します。インターネットからファイルをダウンロードするなど、長時間実行される操作を UI スレッドで直接実行すると、アプリケーションのユーザー インターフェイスは、対応するタスクが完了するまで「<strong>フリーズ」します。

AsyncTask を使用すると、UI スレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラーを操作することなく、バックグラウンド操作を実行し、UI スレッドで結果を発行できます。

AsyncTask クラスを使用するには、クラスを拡張し、少なくとも doInBackground() メソッドをオーバーライドする必要があります。

実装する必要がある最も一般的なメソッドは次のとおりです。

  1. onPreExecute()– スレッドが実行を開始する前に UI スレッドで呼び出されます。このメソッドは、通常、進行状況バーを表示するなど、タスクをセットアップするために使用されます。

  2. doInBackground(Params…)– これは、バックグラウンド スレッドで実行されるメソッドです。このメソッドでは、アプリケーションがバックグラウンドで実行するすべてのコードを配置する必要があります。終了すると、結果を onPostExecute() に送信します。

  3. onProgressUpdate()- doInBackground() で publishProgress() を呼び出すと呼び出されます。

  4. onPostExecute(Result)– バックグラウンド スレッドの終了後に UI スレッドで呼び出されます。doInBackground() から受け取った結果をパラメーターとして受け取ります。

AsyncTaskはジェネリック クラスで、次の 3 つの型を使用します。AsyncTask<Params, Progress, Result>.

Params– 入力。AsyncTask に渡すもの (ファイルのダウンロード元の URL にすることができます)

Progress– 更新がある場合は、onProgressUpdate() に渡されます (この引数は、ダウンロード プロセスの進行状況を UI に表示する場合に使用されます)

Result- 出力。doInBackground() を onPostExecute() に返すもの

于 2013-03-06T09:28:58.390 に答える