数据库中的微调器 - 首先添加空值

时间:2014-08-15 14:18:30

标签: java android spinner

我有代码:

public class TesterActivity extends Activity {
public Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // just for this example:
    // create database table with an id field and a text field and add some data
    class MyDBHelper extends SQLiteOpenHelper {
        public MyDBHelper(Context context) {
            super(context, "someDB", null, 2);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE someTable (someIDF INTEGER, someTextF TEXT)");
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS someTable");
            onCreate(db);
            db.execSQL("INSERT INTO someTable (someIDF, someTextF) VALUES (54, 'Some text')");
            db.execSQL("INSERT INTO someTable (someIDF, someTextF) VALUES (99, 'Some more text')");
            db.execSQL("INSERT INTO someTable (someIDF, someTextF) VALUES (173, 'Even more text')");
        }
    }
    SQLiteDatabase db = new MyDBHelper(this).getWritableDatabase();

    // get a cursor from the database with an "_id" field
    Cursor c = db.rawQuery("SELECT someIDF AS _id, someTextF FROM someTable", null);

    // make an adapter from the cursor
    String[] from = new String[] {"someTextF"};
    int[] to = new int[] {android.R.id.text1};
    SimpleCursorAdapter sca = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to);

    // set layout for activated adapter
    sca.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // get xml file spinner and set adapter 
    Spinner spin = (Spinner) this.findViewById(R.id.spinner1);
    spin.setAdapter(sca);

    // set spinner listener to display the selected item id
    mContext = this;
    spin.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
            Toast.makeText(mContext, "Selected ID=" + id, Toast.LENGTH_LONG).show();
        }
        public void onNothingSelected(AdapterView<?> parent) {}
        });
    }
}

来自:Populating Spinner From SQLite Database Android

我想为这个空值添加,所以我做了:

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS someTable");
        onCreate(db);
        db.execSQL("INSERT INTO someTable (someIDF, someTextF) VALUES (54, ' ')");
        db.execSQL("INSERT INTO someTable (someIDF, someTextF) VALUES (54, 'Some text')");
        db.execSQL("INSERT INTO someTable (someIDF, someTextF) VALUES (99, 'Some more text')");
        db.execSQL("INSERT INTO someTable (someIDF, someTextF) VALUES (173, 'Even more text')");
    }

这显示我在微调器中的空值,但如果我想通过

得到这个微调器
TextView textView = (TextView)spinner.getSelectedView();
String result = textView.getText().toString();

我有错误:

  

显示java.lang.NullPointerException

此错误始终是 - 如果我选择非空项目。

为什么呢?我可以用其他方式添加空值,但是什么?

1 个答案:

答案 0 :(得分:1)

首先,我无法看到你是否在你的活动onCreate方法((TextView)findbyid(R.id.etc ..))上定义了你的textview?如果那个没问题,那么,

你的spin.setOnItemSelectedListener上的

可以使用:

String result = parent.getItemAtPosition(position).toString();

结果应该是&#34; &#34;