Reputation: 523
My Logcat
08-06 01:27:34.874: ERROR/AndroidRuntime(721): Uncaught handler: thread main exiting due to uncaught exception
08-06 01:27:34.893: ERROR/AndroidRuntime(721): java.lang.NullPointerException
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at one.two.Booking$MyOnItemSelectedListener.onItemSelected(Booking.java:53)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at android.widget.AdapterView.fireOnSelected(AdapterView.java:856)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at android.widget.AdapterView.access$200(AdapterView.java:41)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:827)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at android.os.Handler.handleCallback(Handler.java:587)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at android.os.Handler.dispatchMessage(Handler.java:92)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at android.os.Looper.loop(Looper.java:123)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at android.app.ActivityThread.main(ActivityThread.java:3948)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at java.lang.reflect.Method.invoke(Method.java:521)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
08-06 01:27:34.893: ERROR/AndroidRuntime(721): at dalvik.system.NativeStart.main(Native Method)
Booking.java
package one.two;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
public class Booking extends Activity
{
private DBAdapter db;
private Spinner colourSpinner;
public Cursor c;
public TextView txtArrival;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
db = new DBAdapter(this);
this.setContentView(R.layout.booking);
db.open();
fillData();
db.close();
TextView txtArrival = (TextView) findViewById(R.id.txtArrival);
Spinner colourSpinner = (Spinner) findViewById(R.id.myspinner);
colourSpinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
}
private void fillData()
{
c = db.getSpinnerData();
startManagingCursor(c);
String[] from = new String[]{DBAdapter.KEY_ARRIVAL};
int[] to = new int[]{android.R.id.text1};
SimpleCursorAdapter adapter =
new SimpleCursorAdapter(this,R.layout.booking, c, from, to );
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
Spinner colourSpinner = (Spinner) findViewById(R.id.myspinner);
colourSpinner.setAdapter(adapter);
}
public class MyOnItemSelectedListener implements OnItemSelectedListener
{
public void onItemSelected(AdapterView<?> arg0, View v,int position, long id)
{
boolean result = Booking.this.c.moveToPosition(position);
if (result) {
String title=Booking.this.c.getString(1);
Booking.this.txtArrival.setText(title);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
};
}
I would like to know how to solve this error. Thank you.
Upvotes: 2
Views: 1557
Reputation: 7076
You are creating local variables with the same names as your class members. This leads to the members being hidden by the local ones which is why you are getting NullPointerExceptions. You are simply not giving the members any value which is why they are null.
What you want to do is:
package one.two;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
public class Booking extends Activity
{
private DBAdapter db;
private Spinner colourSpinner;
public Cursor c;
public TextView txtArrival;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
db = new DBAdapter(this);
this.setContentView(R.layout.booking);
txtArrival = (TextView) findViewById(R.id.txtArrival); // Member assignment
colourSpinner = (Spinner) findViewById(R.id.myspinner); // Member assignment
db.open();
fillData();
db.close();
colourSpinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
}
private void fillData()
{
c = db.getSpinnerData();
startManagingCursor(c);
String[] from = new String[]{DBAdapter.KEY_ARRIVAL};
int[] to = new int[]{android.R.id.text1};
SimpleCursorAdapter adapter =
new SimpleCursorAdapter(this,R.layout.booking, c, from, to );
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
// Removed this line, since members is set in onCreate
colourSpinner.setAdapter(adapter);
}
public class MyOnItemSelectedListener implements OnItemSelectedListener
{
public void onItemSelected(AdapterView<?> arg0, View v,int position, long id)
{
boolean result = Booking.this.c.moveToPosition(position);
if (result) {
String title=Booking.this.c.getString(1);
Booking.this.txtArrival.setText(title);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
};
}
Upvotes: 2
Reputation: 185
There is only one place on line 53 where you can get NPR: txtArrival.setText()
.
I believe you forgot to set TextView's ID to R.id.txtArrival
in layout and (TextView) findViewById(R.id.txtArrival);
returns NULL.
Upvotes: 0
Reputation: 7501
I believe you need to make sure that the variable "C" is not null.
String title=c.getString(1); txtArrival.setText(title);
seems to be the trouble code, and if c is null, then c.getString(1) should return nullpointerexception, or it might just return nothing, causing title to be null, and setting txtarrival.setText with a null should throw an error too.
Upvotes: 0
Reputation: 15762
It looks like the error is on line 53, not 54.
In any case, you're dereferencing a null pointer. Just check and see which variable isn't defined, and avoid calling it (or make sure it's properly initialized).
Assuming you've listed the correct line, it's either txtArrival
or Booking.this
(I'm not sure if you can you call this
on a class.).
Upvotes: 0