1

I created a process to perform data reading json from the server. When done reading the data, I want the ProgressDialog appear when the page is doing readings and will disappear when all data has been shown to listview.

I have made and put :

ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("Wait while loading...");
progress.show();

But always fails.

For this case, all the data has been successfully displayed properly in listview, I just want to using ProgressDialog to help display the data retrieval process.

My Activity :

package com.joris.moviesmonitoring;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.joris.moviesmonitoring.JSONParser;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class MainActivity extends ListActivity {

        // url to make request
        private static String url = "http://api.mydomain.info/contacts/";

        // JSON Node names
        private static final String TAG_CONTACTS = "contacts";
        private static final String TAG_ID = "id";
        private static final String TAG_NAME = "name";
        private static final String TAG_EMAIL = "email";
        private static final String TAG_PHONE = "phone";
        private static final String TAG_PHONE_MOBILE = "mobile";

        // contacts JSONArray
        JSONArray contacts = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
            StrictMode.setThreadPolicy(policy);


            // Hashmap for ListView
            ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();

            // Creating JSON Parser instance
            JSONParser jParser = new JSONParser();

            // getting JSON string from URL
            JSONObject json = jParser.getJSONFromUrl(url);


            try {
                // Getting Array of Contacts
                contacts = json.getJSONArray(TAG_CONTACTS);

                // looping through All Contacts
                for(int i = 0; i < contacts.length(); i++){
                    JSONObject c = contacts.getJSONObject(i);

                    // Storing each json item in variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
                    String email = c.getString(TAG_EMAIL);

                    // Phone number is agin JSON Object
                    JSONObject phone = c.getJSONObject(TAG_PHONE);
                    String mobile = phone.getString(TAG_PHONE_MOBILE);

                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(TAG_ID, id);
                    map.put(TAG_NAME, name);
                    map.put(TAG_EMAIL, email);
                    map.put(TAG_PHONE_MOBILE, mobile);

                    // adding HashList to ArrayList
                    contactList.add(map);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }



            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(this, contactList,
                    R.layout.list_item,
                    new String[] { 
                        TAG_NAME, 
                        TAG_EMAIL, 
                        TAG_PHONE_MOBILE,
                        TAG_PHONE_MOBILE
                    }, new int[] {
                            R.id.name, 
                            R.id.email, 
                            R.id.mobile,
                            R.id.desc
                    });

            setListAdapter(adapter);


            // selecting single ListView item
            ListView lv = getListView();

            // Launching new screen on Selecting Single ListItem
            lv.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // getting values from selected ListItem
                    String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                    String cost = ((TextView) view.findViewById(R.id.email)).getText().toString();
                    String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString();


                    // Starting new intent
                    Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
                    in.putExtra(TAG_NAME, name);
                    in.putExtra(TAG_EMAIL, cost);
                    in.putExtra(TAG_PHONE_MOBILE, description);
                    startActivity(in);

                }
            });



        }



}

I have tried like: progressDialog in AsyncTask But the results have always failed. I am very new to learn java.

Community
  • 1
  • 1
Bertho Joris
  • 1,483
  • 5
  • 27
  • 60

1 Answers1

0

it probably didnt appear because the data got done before the dialog had time to get created so you canceled the dialog before it even appeared. to test this dont cancel the dialog when processing is done and just let it go. if the dialg appears then that is your problem

tyczj
  • 71,600
  • 54
  • 194
  • 296
  • Once I get rid of the line: progress.dismiss (); Sure enough, the data appears along with ProgressDialog. But ProgressDialog not appear before the process begins. Before data releases in the listview, the page is blank. ProgressDialog should not appear here. How do I do that? – Bertho Joris Oct 14 '13 at 20:19
  • well you can use a handler to delay the processing by a second or two to allow the dialog to show but that seems kind of pointless to keep the user waiting for no reason – tyczj Oct 14 '13 at 20:21
  • Yes .. should not be like that...How about http://stackoverflow.com/questions/4538338/progressdialog-in-asynctask ? Do you accustomed to using it? – Bertho Joris Oct 14 '13 at 20:34
  • AsyncTask is the preferred way to display a progress dialog but you will still probably see the same result of it not being shown. The best thing to do is use an asynctask with the dialog and dont worry about if it shows or not because if the process is running long enough it will show if not then the user probably wont notice anyway – tyczj Oct 14 '13 at 20:38