1

我正在制作一个应用程序,其中我从服务器检索一些数据,然后将其显示给用户。它涉及以下步骤:

  1. 在 ListView 中向用户显示名称列表。
  2. 用户单击任何 ListView 项目。
  3. 获取单击项目的 NID,然后调用 AsyncTask 类,在该类中根据 NID 从服务器获取数据。
  4. 在 AsyncTask 类的 onPreExecute 方法中,我向用户显示一个对话框,指示正在获取数据。
  5. 现在我解析所有数据并将其放入一个 Bean 类对象中。
  6. 在 onPostExecute 方法中,我启动另一个 Activity(nextactivity) 并使用 Parcelable Intent 将所有数据传递给此 Activity。
  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