ProgressBar直到JSONParser返回数据

时间:2013-06-07 14:58:00

标签: java android progress-bar android-progressbar

我的应用使用TabView显示数据。其中一个TabActivity与JSONArray对应,其中一个是GoogleMap。当我点击其中一个时,应用会停止几秒钟,然后显示内容。所以我有一个问题 - 如何使用ProgressBar立即启动它,当数据加载时,它将启动活动内容。我根本无法得到如何使用ProgressBar(这个旋转的东西)。

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

始终尝试从UI线程中单独下载数据。

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

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

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

public class 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>

答案 1 :(得分:0)

使用asyncTask

将此代码放在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 
    }
}