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();
expListView = (ExpandableListView) findViewById(R.id.lvExp);
prepareListData();
listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
expListView.setAdapter(listAdapter);
expListView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
return false;
}
});
expListView.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(getApplicationContext(),
listDataHeader.get(groupPosition) + " Expanded",
Toast.LENGTH_SHORT).show();
}
});
expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(getApplicationContext(),
listDataHeader.get(groupPosition) + " Collapsed",
Toast.LENGTH_SHORT).show();
}
});
expListView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
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();
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setTitle("Sharani Designs");
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params)
{
arraylist = new ArrayList<HashMap<String, String>>();
ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
jsonobject = JSONfunctions
.getJSONfromURL("http://api.androidhive.info/contacts/");
try {
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>();
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
map.put(TAG_EMAIL, email);
map.put(TAG_PHONE_MOBILE, mobile);
contactList.add(map);
}
}
catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args) {
mProgressDialog.dismiss();
}
}
private void prepareListData() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
listDataHeader.add("Top 250");
listDataHeader.add("Now Showing");
listDataHeader.add("Coming Soon..");
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);
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