我正在制作一个应用程序,其中我从服务器检索一些数据,然后将其显示给用户。它涉及以下步骤:
- 在 ListView 中向用户显示名称列表。
- 用户单击任何 ListView 项目。
- 获取单击项目的 NID,然后调用 AsyncTask 类,在该类中根据 NID 从服务器获取数据。
- 在 AsyncTask 类的 onPreExecute 方法中,我向用户显示一个对话框,指示正在获取数据。
- 现在我解析所有数据并将其放入一个 Bean 类对象中。
- 在 onPostExecute 方法中,我启动另一个 Activity(nextactivity) 并使用 Parcelable Intent 将所有数据传递给此 Activity。
- 关闭对话框。
- 现在在这个 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);
}