简体   繁体   English

在解析JSON响应android时显示百分比进度对话框

[英]Showing percentage progress dialog while parsing JSON response android

I am getting a JSON response from a URL and convert it into a string. 我从URL获得JSON响应并将其转换为字符串。 I want to parse this string to get some values from the response. 我想解析此字符串以从响应中获取一些值。 But when the parsing takes place the application shows a blank screen(black screen) until the response is parsed. 但是,在进行解析时,应用程序显示空白屏幕(黑屏),直到解析响应为止。 I wanted to show a ProgressDialog which shows how much data is to be downloaded so that the app does not show that blank screen. 我想显示一个ProgressDialog,该对话框显示要下载多少数据,以便该应用程序不会显示该空白屏幕。 I tried showing a ProgressDialog but it is shown before the parsing and after it is done. 我尝试显示一个ProgressDialog,但在解析之前和完成之后都会显示它。 The in between time still shows the blank screen. 在此之间的时间仍显示空白屏幕。

Here is my code:- 这是我的代码:

String registerContet = "myUrl";

    String items;
    try
    {

        items = new FetchItems().execute(registerContet).get();

        pDialog = new ProgressDialog(this).show(Home.this, "Fetching news items", "Please wait..");

        JSONArray jObject = new JSONArray(items);
        for (int i = 0; i < jObject.length(); i++)
        {
             JSONObject menuObject = jObject.getJSONObject(i);

             String title= menuObject.getString("Title");
             String description= menuObject.getString("BodyText");
             String thumbnail= menuObject.getString("ThumbnailPath");
             String newsUrl = menuObject.getString("Url");
             String body = menuObject.getString("Body");
             String newsBigImage = menuObject.getString("ImageBlobUrls");

                map = new HashMap<String,String>();
                map.put(SOURCETITLE, title);
                map.put(TITLE, description);
                map.put(THUMBNAILPATH, thumbnail);
                map.put(BODY, body);
                map.put(URL, newsUrl);
                map.put(IMAGEBLOBURLS,newsBImage);

                myNList.add(map);

    }
        itemsAdapter = new LazyAdapter(Home.this, myNList);
        if(pDialog!=null && pDialog.isShowing())
        {
            pDialog.dismiss();
        }
        nList.setAdapter(itemsAdapter);

        nList.setOnItemClickListener(new OnItemClickListener() 
        {

            @Override
            public void onItemClick(AdapterView<?> arg0,
                    View arg1, int position, long arg3) 
            {
                // TODO Auto-generated method stub
                myDialog = new ProgressDialog(Home.this).show(Home.this, "Fetching news..", "Just a moment");


                HashMap<String, String> myMap = myNList.get(position);
                Intent nIntent = new Intent(Home.this,NDetails.class);
                newsIntent.putExtra("NItems", myMap);

                startActivity(nIntent);

            }
        });
    }
    catch (InterruptedException e) {

        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

FetchItems.java is FetchItems.java

    private class FetchItems extends AsyncTask<String, String, String> {
    // TODO Auto-generated method stub
    ProgressDialog myDialog;

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        HttpResponse response = null;
        String resultString = "";
        String myResponseBody = "";
        // Creating HTTP client
        HttpClient httpClient = new DefaultHttpClient();
        // Creating HTTP Post
        HttpGet request = new HttpGet(params[0]);
        try {
            response = httpClient.execute(request);
            if (response.getStatusLine().getStatusCode() == 200) {
                HttpEntity entity = response.getEntity();
                if (entity != null) {

                    InputStream inputStream = entity.getContent();
                    myResponseBody = convertToString(inputStream);
                }
            }
        } catch (Exception e) {
        }
        return myResponseBody;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        /*
         * if(myDialog.isShowing()) { myDialog.dismiss(); }
         */
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        /*
         * myDialog = new ProgressDialog(Home.this);
         * myDialog.setMessage("Loading"); myDialog.show();
         */
    }

}

Can anyone tell me how can I resolve this. 谁能告诉我如何解决这个问题。 Thanks 谢谢

public static final int DIALOG_DOWNLOAD_PROGRESS = 0;

Creating dialog in activity: 在活动中创建对话框:

@Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Converting..");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
        }
    }

Show dialog in onPreExecute() onPreExecute()显示对话框

@Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

Dismiss dialog in onPostExecute() onPostExecute()关闭对话框

@Override
    protected void onPostExecute(String unused) {
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

Use this code with in onPreExecute method, 将此代码与onPreExecute方法一起使用,

private ProgressDialog dialog;


dialog = new ProgressDialog(this);
            dialog.setMessage("Please Wait...");
            dialog.setIndeterminate(true);
            dialog.setCancelable(false);
            dialog.show();

easy and simple code for percentage in dialog of progress dialog 进度对话框中用于百分比的简单代码

       > protected void onPreExecute() {

        dialog = new ProgressDialog(UploadActivity.this);
        dialog.setMessage("Loading, please wait.. ");
        dialog.show();
        dialog.setCancelable(false);
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {

            dialog.setMessage("Loading, please wait.. "+String.valueOf(progress[0])+"%");

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM