2010-08-06 90 views
2

我logcat的NullPointerException异常错误

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 

     } 
    }; 
} 

我想知道如何解决这个错误。 谢谢。

+0

添加代码 – User358218 2010-08-06 03:24:25

回答

2

您正在创建与您的班级成员具有相同名称的局部变量。这导致成员被本地隐藏,这就是为什么你得到NullPointerExceptions。你根本不给会员任何价值,这就是为什么他们是空的。

你想要做的是:

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 

     } 
    }; 
} 
+0

仍然存在空错误,在我的logcat – User358218 2010-08-10 03:14:42

+0

错误在Booking.this.txtArrival.setText(title); – User358218 2010-08-10 03:22:47

+0

您是否在我的onCreate版本中使用过代码?我已经移动了onCreate的第7行和第8行,并删除了局部变量的创建。确保你理解你为什么从一开始就有空指针,你将能够更快地解决这些问题! – Key 2010-08-10 07:19:04

0

它看起来像错误是53行,而不是54

在任何情况下,你提领一空指针。只需检查并查看哪个变量未定义,并避免调用它(或确保它已正确初始化)。

假设你列出了正确的一行,它可以是txtArrivalBooking.this(我不确定你是否可以在课堂上致电this)。

+0

对不起,你是什么意思提领一空指针和如何将我去这样做呢? – User358218 2010-08-06 03:20:12

+1

您可以从Booking的内部类中调用Booking.this来引用预订对象而不是内部类。 – 2010-08-06 03:21:21

+0

因此,而不是Booking.this,我会改变它? – User358218 2010-08-06 03:23:48

0

我相信你需要确保变量“C”不为空。

String title = c.getString(1); txtArrival.setText(title);

似乎是麻烦的代码,如果c为null,那么c.getString(1)应该返回nullpointerexception,或者它可能只是不返回任何内容,导致title为null,并将txtarrival.setText设置为null抛出一个错误。

+0

那么我会去解决它?因为我已经有了c = db.getSpinnerData(),它在游标中有数据。 – User358218 2010-08-06 04:11:37

+0

添加一个if检查c是否为空或标题。 – Nicholas 2010-08-06 05:08:54

0

在线53上只有一个地方可以获得NPR:txtArrival.setText()

我相信你忘了在布局中将TextView的ID设置为R.id.txtArrival,并且(TextView) findViewById(R.id.txtArrival);返回NULL。

+0

我已经做了TextView txtArrival =(TextView)findViewById(R.id.txtArrival);在我的创建方法。 – User358218 2010-08-06 05:29:09

相关问题