1

サーバーからデータを取得してユーザーに表示するアプリを作成しています。次の手順が必要です。

  1. 名前のリストが ListView でユーザーに表示されます。
  2. ユーザーが任意の ListView アイテムをクリックします。
  3. クリックされた項目の NID を取得し、NID に従ってサーバーからデータを取得する AsyncTask クラスを呼び出します。
  4. AsyncTask クラスの onPreExecute メソッドで、データがフェッチされていることを示すダイアログをユーザーに表示します。
  5. ここで、すべてのデータを解析し、それを Bean クラス オブジェクトに入れます。
  6. onPostExecute メソッドで、別のアクティビティ (nextactivity) を開始し、Parcelable Intent を使用してすべてのデータをこのアクティビティに渡します。
  7. ダイアログを閉じます。
  8. このActivity(nextactivity)のonCreateメソッドでデータを表示します。

しかし、ここでの問題は、データが大きいため、Activity(nextactivity) の読み込みに時間がかかり、ListView アクティビティが 2 ~ 3 秒間ユーザーに表示された後、nextActivty がユーザーに表示されることです。

ここで、私のコードも示します。

これは、AsyncTask クラスを呼び出してデータをフェッチするメソッドです。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
    Toast toast = Toast.makeText(getApplicationContext(),
        "Item " + (position + 1) + ": " + rowItems.get(position).getNid(),
        Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
    toast.show();

    if(rowItems.get(position).getNid()!=null){

        String[] params=new String[1];
        params[0]=rowItems.get(position).getNid();
        new RepresentativeDataAsynTask(RespresentativeList.this).execute(params);

    }

これは、すべてのデータをフェッチする AsyncTask クラスです。

@Override
    protected void onPreExecute() {
        proDialog = new ProgressDialog(mContext);
        proDialog.setTitle("Support Manager");
        proDialog.setMessage("Fetching Details ...");
        proDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        proDialog.setIcon(R.drawable.ic_launcher);
        proDialog.show();
        super.onPreExecute();
    }
    @Override
    protected RepresentativeData doInBackground(String... params) {
        JSONObject result = null;

        RepresentativeData representativeDetails = new RepresentativeData();
        try {
            result = client.reprentativeDetailNode(mContext.getString(R.string.Server),params[0]);
            //fetching all data by parsing result
        } catch (ClientProtocolException e) {

            error=true;
            e.printStackTrace();
        } catch (IOException e) {

            error=true;
            e.printStackTrace();
        }
        return representativeDetails;
    }

    @Override
    protected void onPostExecute(RepresentativeData result) {
        Intent yourRepresentative = new Intent(mContext,YourRepresentative.class);
        yourRepresentative.putExtra("representative detail", result);
        proDialog.dismiss();
        mContext.startActivity(yourRepresentative);
        }
        super.onPostExecute(result);
    }
4

0 に答える 0