ExpandableListView with JSON in android - Listing error

Trying to make an ExpandableListView using JSON analysis. Getting an error,

i Just tried to parse the data from JSON into one child group, but failed. Anyone permits this, and it will be useful to me. Help will be appreciated.

There is no error in the project, but after deployment it is closed by the emulator.

My code

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

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

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;

import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.widget.Toast;

public class MainActivity extends Activity {

    ExpandableListAdapter listAdapter;
    ProgressDialog mProgressDialog;
    ExpandableListView expListView;
    List<String> listDataHeader;
    ArrayList<HashMap<String, String>> arraylist;
    HashMap<String, List<String>> listDataChild;
    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_ADDRESS = "address";
    private static final String TAG_GENDER = "gender";
    private static final String TAG_PHONE = "phone";
    private static final String TAG_PHONE_MOBILE = "mobile";
    private static final String TAG_PHONE_HOME = "home";
    private static final String TAG_PHONE_OFFICE = "office";

    JSONArray contacts = null;
    JSONObject jsonobject;
    JSONArray jsonarray;
    String [] str=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new DownloadJSON().execute();

        // get the listview
        expListView = (ExpandableListView) findViewById(R.id.lvExp);

        // preparing list data
        prepareListData();

        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

        // setting list adapter
        expListView.setAdapter(listAdapter);

        // Listview Group click listener
        expListView.setOnGroupClickListener(new OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                    int groupPosition, long id) {
                // Toast.makeText(getApplicationContext(),
                // "Group Clicked " + listDataHeader.get(groupPosition),
                // Toast.LENGTH_SHORT).show();
                return false;
            }
        });

        // Listview Group expanded listener
        expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

            @Override
            public void onGroupExpand(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Expanded",
                        Toast.LENGTH_SHORT).show();
            }
        });

        // Listview Group collasped listener
        expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

            @Override
            public void onGroupCollapse(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Collapsed",
                        Toast.LENGTH_SHORT).show();

            }
        });

        // Listview on child click listener
        expListView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(
                        getApplicationContext(),
                        listDataHeader.get(groupPosition)
                                + " : "
                                + listDataChild.get(
                                        listDataHeader.get(groupPosition)).get(
                                        childPosition), Toast.LENGTH_SHORT)
                        .show();
                return false;
            }
        });
    }

    private class DownloadJSON extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Create a progressdialog
            mProgressDialog = new ProgressDialog(MainActivity.this);
            // Set progressdialog title
            mProgressDialog.setTitle("Sharani Designs");
            // Set progressdialog message
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            // Show progressdialog
            mProgressDialog.show();
        }

        @Override   
            protected Void doInBackground(Void... params) 
            {
                arraylist = new ArrayList<HashMap<String, String>>();
                // Retrieve JSON Objects from the given URL address
                ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
                jsonobject = JSONfunctions
                        .getJSONfromURL("http://api.androidhive.info/contacts/");

                try {
                    // Locate the array name in JSON
                    jsonarray = jsonobject.getJSONArray(TAG_CONTACTS);
                    for(int i = 0; i < contacts.length(); i++){
                        JSONObject c = contacts.getJSONObject(i);
                        String id = c.getString(TAG_ID);
                        String name = c.getString(TAG_NAME);
                        str[i]=c.getString(TAG_NAME);
                        String email = c.getString(TAG_EMAIL);
                        String address = c.getString(TAG_ADDRESS);
                        String gender = c.getString(TAG_GENDER);
                        JSONObject phone = c.getJSONObject(TAG_PHONE);
                        String mobile = phone.getString(TAG_PHONE_MOBILE);
                        String home = phone.getString(TAG_PHONE_HOME);
                        String office = phone.getString(TAG_PHONE_OFFICE);
                        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();
                }
                // TODO Auto-generated method stub
                return null;
        }
        @Override
        protected void onPostExecute(Void args) {
            // Locate the listview in listview_main.xml

            mProgressDialog.dismiss();
        }
    }
    /*
     * Preparing the list data
     */
    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        // Adding child data
        listDataHeader.add("Top 250");
        listDataHeader.add("Now Showing");
        listDataHeader.add("Coming Soon..");

        // Adding child data
        List<String> top250 = new ArrayList<String>();

        for(int x=0;x<str.length;x++)
        {
            top250.add(str[x]);
        }

        List<String> nowShowing = new ArrayList<String>();
        nowShowing.add("The Conjuring");
        nowShowing.add("Despicable Me 2");
        nowShowing.add("Turbo");
        nowShowing.add("Grown Ups 2");
        nowShowing.add("Red 2");
        nowShowing.add("The Wolverine");

        List<String> comingSoon = new ArrayList<String>();
        comingSoon.add("2 Guns");
        comingSoon.add("The Smurfs 2");
        comingSoon.add("The Spectacular Now");
        comingSoon.add("The Canyons");
        comingSoon.add("Europa Report");

        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data
        listDataChild.put(listDataHeader.get(1), nowShowing);
        listDataChild.put(listDataHeader.get(2), comingSoon);
    }



}

Added Internet permission. Having the JSON class in my project package, the JSON file is also valid.

I think that in this part only a logical error occurs, but does not know how to solve it,

for(int x=0;x<str.length;x++)
{
     top250.add(str[x]);
}

updated Logcat after str initialized variable

02-07 06:47:06.231: E/AndroidRuntime(2490): FATAL EXCEPTION: main
02-07 06:47:06.231: E/AndroidRuntime(2490): Process: info.androidhive.expandablelistview, PID: 2490
02-07 06:47:06.231: E/AndroidRuntime(2490): java.lang.RuntimeException: Unable to start activity ComponentInfo{info.androidhive.expandablelistview/info.androidhive.expandablelistview.MainActivity}: java.lang.NullPointerException
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.ActivityThread.access$700(ActivityThread.java:135)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.os.Handler.dispatchMessage(Handler.java:102)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.os.Looper.loop(Looper.java:137)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.ActivityThread.main(ActivityThread.java:4998)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at java.lang.reflect.Method.invokeNative(Native Method)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at java.lang.reflect.Method.invoke(Method.java:515)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at dalvik.system.NativeStart.main(Native Method)
02-07 06:47:06.231: E/AndroidRuntime(2490): Caused by: java.lang.NullPointerException
02-07 06:47:06.231: E/AndroidRuntime(2490):     at info.androidhive.expandablelistview.MainActivity.prepareListData(MainActivity.java:208)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at info.androidhive.expandablelistview.MainActivity.onCreate(MainActivity.java:60)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.Activity.performCreate(Activity.java:5243)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-07 06:47:06.231: E/AndroidRuntime(2490):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
02-07 06:47:06.231: E/AndroidRuntime(2490):     ... 11 more
02-07 06:47:06.511: D/dalvikvm(2490): GC_FOR_ALLOC freed 201K, 9% free 2984K/3260K, paused 28ms, total 28ms
02-07 06:47:08.771: I/Process(2490): Sending signal. PID: 2490 SIG: 9
+3
source share
2 answers

, , ExpandableListView , JSON. prepareListData onPostExecute.

, , ExpandableListView, , expListView.invalidateViews

, , , str, , NPE.

0

, :

for(int i = 0; i < contacts.length(); i++){
    JSONObject c = contacts.getJSONObject(i);
    String id = c.getString(TAG_ID);
    String name = c.getString(TAG_NAME);
    str[i]=c.getString(TAG_NAME);
    String email = c.getString(TAG_EMAIL);
    String address = c.getString(TAG_ADDRESS);
    String gender = c.getString(TAG_GENDER);

, str , :

str[] = new String[100]; // for example

, , .

, , arraylist.

, prepareList() , - , .

0

All Articles