サーバーからデータを取得してユーザーに表示するアプリを作成しています。次の手順が必要です。
- 名前のリストが ListView でユーザーに表示されます。
- ユーザーが任意の ListView アイテムをクリックします。
- クリックされた項目の NID を取得し、NID に従ってサーバーからデータを取得する AsyncTask クラスを呼び出します。
- AsyncTask クラスの onPreExecute メソッドで、データがフェッチされていることを示すダイアログをユーザーに表示します。
- ここで、すべてのデータを解析し、それを Bean クラス オブジェクトに入れます。
- onPostExecute メソッドで、別のアクティビティ (nextactivity) を開始し、Parcelable Intent を使用してすべてのデータをこのアクティビティに渡します。
- ダイアログを閉じます。
- この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);
}