problems with BaseExpandableListAdapter and Multi Dimensional ArrayList
I am trying to implement directory structure using
BaseExpandableListAdapter . My folder structure on SD Card
/Folder
/A/a.amr
/A/b.amr
/B/a.amr
/B/b.amr
/C
Now i am using the following code
expandableListView = (ExpandableListView)
findViewById(R.id.exSavedVoiceList);
ArrayList<String> parentList = new ArrayList<String>();
ArrayList<ArrayList<String>> childList = new
ArrayList<ArrayList<String>>();
File fileCallSpeaker = new File(Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/Call Speaker");
int count = 0;
if (fileCallSpeaker.exists()) {
String[] parentFolders = fileCallSpeaker.list();
for (int i = 0; i < parentFolders.length; i++) {
File contactName = new File(fileCallSpeaker.getAbsolutePath()
+ "/" + parentFolders[i]);
if (contactName.isDirectory() && contactName.list().length > 0) {
parentList.add(contactName.getName()); // adding name if
// folder not empty
String[] childfiles = contactName.list(); // childfiles name
for (int j = 0; j < childfiles.length; j++) {
if (childfiles[j].endsWith(".amr")) {
childList.add(new ArrayList<String>());
childList.get(count).add(childfiles[j]);
}
}
count++;
}
}
}
String[] parentListString = new String[parentList.size()];
int i = 0;
int j = 0;
for (String pl : parentList) {
parentListString[i] = pl;
System.out.println(parentListString[i]);
i++;
}
i = 0;
String[][] childListString = new String[parentList.size()][childList
.size()];
System.out.println(parentList.size() + " " + childList.size());
for (ArrayList<String> al : childList) {
for (String s : al) {
childListString[i][j] = s;
System.out.println(childListString[i][j]);
j++;
}
i++;
j = 0;
}
CustomExpandableListAdapter customExpandableListAdapter = new
CustomExpandableListAdapter(
this, parentListString, childListString);
expandableListView.setAdapter(customExpandableListAdapter);
On using the above code Group name is being viewed but when i click on the
Group I get the following error.
08-13 21:04:50.467: E/AndroidRuntime(17260): FATAL EXCEPTION: main
08-13 21:04:50.467: E/AndroidRuntime(17260):
java.lang.NullPointerException: println needs a message
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.util.Log.println_native(Native Method)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.util.Log.d(Log.java:138)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
com.itcse.callteller.CustomExpandableListAdapter.getChildView(CustomExpandableListAdapter.java:64)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:451)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.AbsListView.obtainView(AbsListView.java:2159)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.ListView.makeAndAddView(ListView.java:1831)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.ListView.fillDown(ListView.java:674)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.ListView.fillSpecific(ListView.java:1332)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.ListView.layoutChildren(ListView.java:1630)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.AbsListView.onLayout(AbsListView.java:1994)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.View.layout(View.java:14003)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewGroup.layout(ViewGroup.java:4375)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.RelativeLayout.onLayout(RelativeLayout.java:985)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.View.layout(View.java:14003)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewGroup.layout(ViewGroup.java:4375)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.View.layout(View.java:14003)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewGroup.layout(ViewGroup.java:4375)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.View.layout(View.java:14003)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewGroup.layout(ViewGroup.java:4375)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.widget.FrameLayout.onLayout(FrameLayout.java:448)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.View.layout(View.java:14003)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewGroup.layout(ViewGroup.java:4375)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.Choreographer.doCallbacks(Choreographer.java:562)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.Choreographer.doFrame(Choreographer.java:532)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.os.Handler.handleCallback(Handler.java:725)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.os.Handler.dispatchMessage(Handler.java:92)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.os.Looper.loop(Looper.java:137)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
android.app.ActivityThread.main(ActivityThread.java:5039)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
java.lang.reflect.Method.invokeNative(Native Method)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
java.lang.reflect.Method.invoke(Method.java:511)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-13 21:04:50.467: E/AndroidRuntime(17260): at
dalvik.system.NativeStart.main(Native Method)
But if i use the following code everything is working fine. Thus, the
error must be in the code above.
private void initializing() {
// TODO Auto-generated method stub
expandableListView = (ExpandableListView)
findViewById(R.id.exSavedVoiceList);
File fileCallSpeaker = new File(Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/Call Speaker");
if (fileCallSpeaker.exists()) {
String[] parentFolders = fileCallSpeaker.list();
parentList = new String[parentFolders.length];
//parentList = fileCallSpeaker.list();
if (parentFolders.length > 0) {
childList = new String[parentFolders.length + 1][];
for (int i = 0; i < parentFolders.length; i++) {
File contactName = new File(
fileCallSpeaker.getAbsolutePath() + "/"
+ parentFolders[i]);
// if contact folder is not empty
if (contactName.list().length > 0) {
parentList[i]= parentFolders[i];
System.out.println(parentList[i]);
String[] childfiles = contactName.list();
if (childfiles.length > 0) {
childList[i] = new String[childfiles.length];
for (int j = 0; j < childfiles.length; j++) {
childList[i][j] = childfiles[j];
}
}
}
}
}
}
CustomExpandableListAdapter customExpandableListAdapter = new
CustomExpandableListAdapter(
this, parentList, childList);
expandableListView.setAdapter(customExpandableListAdapter);
}
I want to use the first code and know that i made some silly mistake. Can
someone correct me?
No comments:
Post a Comment