1

我的应用程序使用 TabView 来显示数据。其中一个 TabActivity 对应 JSONArray,其中一个是 GoogleMap。当我单击其中一个时,应用程序会停止几秒钟,然后显示内容。所以我有疑问 - 如何让它立即从 ProgressBar 开始,并且在加载数据时它会开始活动的内容。我根本不知道如何使用 ProgressBar(这个旋转的东西)。

提前致谢。

4

2 回答 2

2

使用AsyncTask下载您的数据。这样,在下载数据之前,您的 UI 不会冻结。

始终尝试将下载数据与 UI 线程分开。

您可以使用该onProgressUpdate()方法创建一个漂亮的进度条。

如果您无法计算任何进度,您应该在执行任务并将其删除之前启用一个没有进度范围的对话框onPostExecute()

请参阅文档中的用法示例以查看用法示例。

公共类 HomeActivity 扩展 Activity {

private static String url = "address here";
private static final String TAG_CONTENT = "content";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_last_minute);
    TextView tv = (TextView) findViewById(R.id.lastMinuteText);

    // Create progress dialog     
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    // Get the layout inflater
    LayoutInflater inflater = getLayoutInflater();
    // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the dialog
    builder.setView(inflater.inflate(R.layout.progressdialog, null));
    progressDialog = builder.create();
    progressDialog.setTitle("Downloading JSON");
    progressDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Whatever",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
    // Show dialog
    progressDialog.show();
    //download json
    new downloadJSON().Execute(url);
}
private class downloadJSON extends AsyncTask<String, Void, String> {

    private String allMessages = "";
    @Override
    protected Void doInBackground(String... params) {
        String url = params;
        //JSON PARSER
        JSONParser jParser = new JSONParser();

        try {
            JSONArray messages = jParser.getJSON(url);
        } catch(JSONException e) {
            e.printStackTrace();
        }

        for(int i = 0; i < messages.length(); i++) {
            JSONObject c;
            try {
                c = messages.getJSONObject(i);
                allMessages = allMessages + c.getString(TAG_CONTENT) + 
                    "\n-----------------------------------------\n";
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        return allMessages ;
    }

    @Override
    protected void onPostExecute(String result) {
        tv.setText(result);
        progressDialog.cancel();
    }

    @Override
    protected void onProgressUpdate(Void... values) {

    }

}

}

您的对话框(R.layout.progressdialog):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
于 2013-06-07T15:03:54.427 回答
0

使用异步任务

将此代码放在 oncreate() 方法中

private static ProgressDialog dialog;
LongOperation MyTask= new LongOperation();
        MyTask.execute();
dialog = ProgressDialog.show(this, "", "Wait Please");

private class LongOperation extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        // Do here what you want Every thing process should be here only
    }      

    @Override
    protected void onPostExecute(String result) { 
     dialog.dissmiss();

       //now you can see the result here 
    }
}
于 2013-06-07T15:06:14.513 回答