Reputation: 1564
Help Please! I have been trying to get my list view to work as efficiently as possible, but it keeps forceclosing with a NullPointerException. Here is my LogCat. I really cant figure it out.
12-31 14:32:35.552: D/AndroidRuntime(240): Shutting down VM
12-31 14:32:35.552: W/dalvikvm(240): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
12-31 14:32:35.552: E/AndroidRuntime(240): Uncaught handler: thread main exiting due to uncaught exception
12-31 14:32:35.602: E/AndroidRuntime(240): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.cerealBarApps/com.cerealBarApps.FirstLoginActivity}: java.lang.NullPointerException
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.os.Handler.dispatchMessage(Handler.java:99)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.os.Looper.loop(Looper.java:123)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.main(ActivityThread.java:4363)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.reflect.Method.invokeNative(Native Method)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.reflect.Method.invoke(Method.java:521)
12-31 14:32:35.602: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-31 14:32:35.602: E/AndroidRuntime(240): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-31 14:32:35.602: E/AndroidRuntime(240): at dalvik.system.NativeStart.main(Native Method)
12-31 14:32:35.602: E/AndroidRuntime(240): Caused by: java.lang.NullPointerException
12-31 14:32:35.602: E/AndroidRuntime(240): at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
12-31 14:32:35.602: E/AndroidRuntime(240): at com.cerealBarApps.FirstLoginActivity.<init>(FirstLoginActivity.java:30)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.Class.newInstanceImpl(Native Method)
12-31 14:32:35.602: E/AndroidRuntime(240): at java.lang.Class.newInstance(Class.java:1479)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-31 14:32:35.602: E/AndroidRuntime(240): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
12-31 14:32:35.602: E/AndroidRuntime(240): ... 11 more
12-31 14:32:36.962: I/dalvikvm(240): threadid=7: reacting to signal 3
12-31 14:32:37.192: I/dalvikvm(240): Wrote stack trace to '/data/anr/traces.txt'
12-31 14:32:40.592: I/Process(240): Sending signal. PID: 240 SIG: 9
This is my listview code
public class FirstLoginActivity extends ListActivity {
Context mContext;
List mList;
String[] testcontacts;
MessageView aa = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
testcontacts = getResources()
.getStringArray(R.array.testcontacts_array);
aa = new MessageView();
ListView lv = getListView();
lv.setAdapter(aa);
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
}
class MessageView extends ArrayAdapter<String> {
MessageView() {
super(FirstLoginActivity.this, android.R.layout.activity_list_item,
testcontacts);
// TODO Auto-generated constructor stub
}
public View getView(int position, View convertview, ViewGroup parent) {
Log.d("Ebz", "inside getView method");
ViewHolder holder;
View v = convertview;
if (v == null) {
Log.d("Ebz", "if v == null");
LayoutInflater inflater = getLayoutInflater();
v = inflater.inflate(R.layout.list_items, null);
holder = new ViewHolder();
holder.firstLine = (TextView) v.findViewById(R.id.firstLine);
holder.secondLine = (TextView) v.findViewById(R.id.secondLine);
holder.icon1 = (ImageView) v.findViewById(R.id.icon1);
holder.icon2 = (ImageView) v.findViewById(R.id.icon2);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.firstLine.setText(testcontacts[position]);
holder.secondLine.setText(testcontacts[position]);
holder.icon1.setImageBitmap(null);
holder.icon2.setImageBitmap(null);
// call the images directly?
return v;
}
class ViewHolder {
TextView firstLine;
TextView secondLine;
ImageView icon1;
ImageView icon2;
}
}
}
My XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip" >
<ImageView
android:id="@+id/icon1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/secondLine"
android:layout_width="fill_parent"
android:layout_height="26dip"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/icon1"
android:ellipsize="marquee"
android:singleLine="true"
android:text="Some more information" />
<TextView
android:id="@+id/firstLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/secondLine"
android:layout_alignParentTop="true"
android:layout_alignWithParentIfMissing="true"
android:layout_toRightOf="@id/icon1"
android:gravity="center_vertical"
android:text="Some Information" />
<ImageView
android:id="@+id/icon2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dip"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
Upvotes: 0
Views: 798
Reputation: 206869
Your code is terminating in instance initialization for a FirstLoginActivity
object.
Most likely culprit is this line:
String[] testcontacts = getResources().getStringArray(
R.array.testcontacts_array);
Move the initialization to the onCreate
handler, getResources
is probably returning a null
at that point - it is too early in the initialization sequence for all the Activity wiring to be in place.
String[] testcontacts;
...
// in onCreate
testcontacts = getResources().getStringArray(R.array.testcontacts_array);
You should hit a second NullPointerException when you reach:
ListView lv = null;
lv.setAdapter(aa);
as pointed out in the other answers - you're missing a findViewById
call.
Upvotes: 3
Reputation: 19037
You forgot to initialize ListView
here.
ListView lv = null;
lv.setAdapter(aa);
lv.setTextFilterEnabled(true);
Initialize it as follows.
ListView lv = (ListView) v.findViewById(R.id.ListViewID_From_XML);
lv.setAdapter(aa);
lv.setTextFilterEnabled(true);
Upvotes: 1
Reputation: 840
In the code, you are setting the ListView object to null during initialization in the following line of code:
ListView lv = null;
That is fine for initialization. However, you should be doing something like this, before actually using lv object
lv = findViewById(R.layout.<yourlistviewid>);
Once you get a reference to list view object, you can perform all the other operations like setting adapter..etc. Before that, you will get a nullpointer exception.
Upvotes: 1