光标错误android

光标错误android,android,android-cursor,Android,Android Cursor,每当我使用游标对象从数据库检索数据时,我的应用程序都会崩溃。 对此我必须采取什么预防措施?请帮忙 在这个例子中,我有一个简单的表单和一个提交按钮。提交后,列车名称列表将显示在微调器中 错误 02-14 00:38:48.428: E/AndroidRuntime(456): FATAL EXCEPTION: main 02-14 00:38:48.428: E/AndroidRuntime(456): java.lang.RuntimeException: Unable to start act

每当我使用游标对象从数据库检索数据时,我的应用程序都会崩溃。 对此我必须采取什么预防措施?请帮忙

在这个例子中,我有一个简单的表单和一个提交按钮。提交后,列车名称列表将显示在微调器中

错误

02-14 00:38:48.428: E/AndroidRuntime(456): FATAL EXCEPTION: main
02-14 00:38:48.428: E/AndroidRuntime(456): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.spinnerexample/com.example.spinnerexample.MainActivity}: java.lang.NullPointerException02-14 00:38:48.428: E/AndroidRuntime(456):     atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.os.Looper.loop(Looper.java:123)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.app.ActivityThread.main(ActivityThread.java:3683)
02-14 00:38:48.428: E/AndroidRuntime(456):  at java.lang.reflect.Method.invokeNative(Native Method)
02-14 00:38:48.428: E/AndroidRuntime(456):  at java.lang.reflect.Method.invoke(Method.java:507)
02-14 00:38:48.428: E/AndroidRuntime(456):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-14 00:38:48.428: E/AndroidRuntime(456):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-14 00:38:48.428: E/AndroidRuntime(456):  at dalvik.system.NativeStart.main(Native Method)
02-14 00:38:48.428: E/AndroidRuntime(456): Caused by: java.lang.NullPointerException
02-14 00:38:48.428: E/AndroidRuntime(456):  at com.example.spinnerexample.MainActivity.onCreate(MainActivity.java:42)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-14 00:38:48.428: E/AndroidRuntime(456):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-14 00:38:48.428: E/AndroidRuntime(456):  ... 11 more
我的游标对象java文件

    public class AddTrains {

    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "mydb";
    private static final String TABLE_NAME = "trains";
    private static final String KEY_ID = "_id";
    private static final String KEY_TRAIN_NAME = "train_name";
    private static final String KEY_TRAIN_NUMBER = "train_number";
    private static final String KEY_HALT1 = "halt1";
    private static final String KEY_HALT2 = "halt2";
    private static final String KEY_HALT3 = "halt3";
    private static final String KEY_HALT4 = "halt4";
    private static final String KEY_HALT5 = "halt5";

    private DBHelper ourHelper;
    private final Context context;
    private SQLiteDatabase ourDatabase;

    private static final class DBHelper extends SQLiteOpenHelper {

    public DBHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
                KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_TRAIN_NAME + " TEXT NOT NULL, " +
                KEY_TRAIN_NUMBER + " TEXT NOT NULL, " +
                KEY_HALT1 + " TEXT NOT NULL, " +
                KEY_HALT2 + " TEXT NOT NULL, " +
                KEY_HALT3 + " TEXT NOT NULL, " +
                KEY_HALT4 + " TEXT NOT NULL, " +
                KEY_HALT5 + " TEXT NOT NULL); "
                );

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
    }

    public AddTrains(Context c){
        context = c;
    }

    public AddTrains open() throws SQLException{

        ourHelper = new DBHelper(context);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }

    public void close(){

        ourHelper.close();
    }

    public long createEntry(String tname, int tnumber, String stop1,
            String stop2, String stop3, String stop4, String stop5) {
        // TODO Auto-generated method stub
        ContentValues cv = new ContentValues();
        cv.put(KEY_TRAIN_NAME, tname);
        cv.put(KEY_TRAIN_NUMBER, tnumber);
        cv.put(KEY_HALT1, stop1);
        cv.put(KEY_HALT2, stop2);
        cv.put(KEY_HALT3, stop3);
        cv.put(KEY_HALT4, stop4);
        cv.put(KEY_HALT5, stop5);
        return ourDatabase.insert(TABLE_NAME, null, cv);
    }

    public Set<String> getAllData() {
        // TODO Auto-generated method stub
        Set<String> set = new HashSet<String>();
        String selectQuery = "select * from " + TABLE_NAME;
        Cursor cursor = ourDatabase.rawQuery(selectQuery, null);
        Log.d("Count",cursor.getCount()+""); 
        if(cursor.getCount() > 0){
        if (cursor.moveToFirst()) {
        do {
        set.add(cursor.getString(1));
        } while (cursor.moveToNext());
        }
        }
        cursor.close();
        return set;
    }
}
public class AddTrains{
私有静态最终int DB_版本=1;
私有静态最终字符串DB_NAME=“mydb”;
专用静态最终字符串表\u NAME=“trains”;
私有静态最终字符串密钥\u ID=“\u ID”;
专用静态最终字符串KEY\u TRAIN\u NAME=“TRAIN\u NAME”;
专用静态最终字符串密钥\u列车号=“列车号”;
私有静态最终字符串键\u HALT1=“HALT1”;
私有静态最终字符串键\u HALT2=“HALT2”;
私有静态最终字符串键\u HALT3=“HALT3”;
私有静态最终字符串键_HALT4=“HALT4”;
私有静态最终字符串键_HALT5=“HALT5”;
私人助理;
私人最终语境;
私有SQLITE数据库;
私有静态最终类DBHelper扩展了SQLiteOpenHelper{
公共DBHelper(上下文){
super(上下文,数据库名称,空,数据库版本);
//TODO自动生成的构造函数存根
}
@凌驾
public void onCreate(SQLiteDatabase db){
//TODO自动生成的方法存根
db.execSQL(“创建表”+表名+”(“+
KEY_ID+“整数主键自动递增,”+
密钥\u列\u名称+“文本不为空,”+
密钥序列号+文本不为空+
键1+“文本不为空,”+
键2+“文本不为空,”+
键3+“文本不为空,”+
键4+“文本不为空,”+
键_HALT5+“文本不为空;”
);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//TODO自动生成的方法存根
db.execSQL(“如果存在删除表”+表名称);
onCreate(db);
}
}
公共列车(上下文c){
上下文=c;
}
public AddTrains open()引发SQLException{
ourHelper=newdbhelper(上下文);
ourDatabase=ourHelper.getWritableDatabase();
归还这个;
}
公众假期结束(){
ourHelper.close();
}
公共长createEntry(字符串tname、int tnumber、字符串stop1、,
管柱stop2、管柱stop3、管柱stop4、管柱stop5){
//TODO自动生成的方法存根
ContentValues cv=新的ContentValues();
cv.put(钥匙、列车名称、tname);
cv.put(钥匙序列号,t编号);
cv.put(键1,停止1);
cv.put(键2,停止键2);
cv.put(键3,停止3);
cv.put(键4,停止4);
cv.put(键5,停止键5);
返回ourDatabase.insert(表名称,null,cv);
}
公共集getAllData(){
//TODO自动生成的方法存根
Set=newhashset();
String selectQuery=“select*from”+表格名称;
Cursor Cursor=ourDatabase.rawQuery(selectQuery,null);
Log.d(“Count”,cursor.getCount()+);
if(cursor.getCount()>0){
if(cursor.moveToFirst()){
做{
set.add(cursor.getString(1));
}while(cursor.moveToNext());
}
}
cursor.close();
返回集;
}
}
主活动文件

public class MainActivity extends Activity implements OnClickListener {

    EditText train_name, train_number, halt1, halt2, halt3, halt4, halt5;
    Button submit;
    Spinner spinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        train_name = (EditText) findViewById(R.id.train_name);
        train_number = (EditText) findViewById(R.id.train_no);
        halt1 = (EditText) findViewById(R.id.halt1);
        halt2 = (EditText) findViewById(R.id.halt2);
        halt3 = (EditText) findViewById(R.id.halt3);
        halt4 = (EditText) findViewById(R.id.halt4);
        halt5 = (EditText) findViewById(R.id.halt5);
        spinner = (Spinner) findViewById(R.id.spinner1);

        submit.setOnClickListener(this);

        AddTrains db = new AddTrains(this);
        db.open();
        Set<String> set = db.getAllData();
           //Convert set into list
        List<String> list = new ArrayList<String>(set);
          //Sort Data Alphabetical order
        Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String lhs, String rhs) {
        return lhs.compareTo(rhs);
        }
        });
        ArrayAdapter adapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_spinner_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View v, int position,long id) {
                 String name = parent.getItemAtPosition(position).toString();
               Toast.makeText(getApplicationContext(), "You Selected: "+ name, Toast.LENGTH_LONG ).show();
                   }
            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
                });
        db.close();
    }

    public void onClick(View v){
        switch(v.getId()){

        case R.id.button1:
            boolean DidItWorked = true;

            try{
                String tname = train_name.getText().toString();
                int tnumber = Integer.parseInt(train_number.getText().toString());
                String stop1 = halt1.getText().toString();
                String stop2 = halt2.getText().toString();
                String stop3 = halt3.getText().toString();
                String stop4 = halt4.getText().toString();
                String stop5 = halt5.getText().toString();

                AddTrains at = new AddTrains(this);
                at.open();
                at.createEntry(tname, tnumber, stop1, stop2, stop3, stop4, stop5);
                at.close();
            }catch(SQLiteException e){

            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
public类MainActivity扩展活动实现OnClickListener{
EditText列车名称、列车编号、halt1、halt2、halt3、halt4、halt5;
按钮提交;
纺纱机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
列车名称=(EditText)findViewById(R.id.train\u名称);
列车号=(编辑文本)查找视图id(R.id.列车号);
halt1=(EditText)findViewById(R.id.halt1);
halt2=(EditText)findViewById(R.id.halt2);
halt3=(编辑文本)findViewById(R.id.halt3);
halt4=(EditText)findViewById(R.id.halt4);
halt5=(EditText)findViewById(R.id.halt5);
微调器=(微调器)findViewById(R.id.spinner1);
submit.setOnClickListener(这个);
AddTrains db=新的AddTrains(本);
db.open();
Set=db.getAllData();
//将集合转换为列表
列表=新的ArrayList(集合);
//按字母顺序对数据排序
Collections.sort(list,newcomparator(){
@凌驾
公共整数比较(字符串lhs、字符串rhs){
返回左侧比较(右侧);
}
});
ArrayAdapter=新的ArrayAdapter(MainActivity.this,
android.R.layout.simple\u微调器\u项目,列表);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);
spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共位置(AdapterView父视图、视图v、整型位置、长id){
字符串名称=parent.getItemAtPosition(position).toString();
Toast.makeText(getApplicationContext(),“您选择:”+name,Toast.LENGTH\u LONG.show();
}
@凌驾
未选择公共无效(AdapterView arg0){
}
});
db.close();
}
公共void onClick(视图v){
开关(v.getId()){
案例R.id.button1:
布尔值DidItWorked=true;
试一试{
字符串tname=train_name.getText().toString();
int tnumber=Integer.parseInt(序列号.getText().toString());
字符串stop1=halt1.getText().toString();
字符串stop2=halt2.getText().toString();
字符串stop3=halt3.getText().toString
Button submit;
submit.setOnClickListener(this);
submit=(Button)findViewById(R.id.awesome_button);
while (cursor.moveToNext());
02-14 00:38:48.428: E/AndroidRuntime(456): Caused by: java.lang.NullPointerException
02-14 00:38:48.428: E/AndroidRuntime(456):  at com.example.spinnerexample.MainActivity.onCreate(MainActivity.java:42)
public void onClick(View v){
    switch(v.getId()){

    case R.id.button1:
        boolean DidItWorked = true;

        try{
            String tname = train_name.getText().toString();
            // snip ...  
            at.createEntry(tname, tnumber, stop1, stop2, stop3, stop4, stop5);
            at.close();
        }catch(SQLiteException e){

        }
        }catch(SQLiteException e){
            Log.d ("OMG", "button1::onClick() caught exception: " + e.toString() ) ;
            // do nothing or some clean up ... but app will likely keep chugging along  
        }