单击ScrollView后,索引1处的绑定值为null

时间:2015-03-10 11:58:35

标签: java android sqlite android-studio

我创建了一个电影数据库应用程序,用户可以在其中搜索电影,结果将显示在ScrollView中。然后我使这个scrollView可以点击,这样用户就可以点击一部电影,这将导致另一个活动显示该电影的所有细节。但是当我点击电影结果时,我收到了这个错误。知道为什么吗?

代码:

public class MainActivity4 extends ActionBarActivity {

String filmID;
SQLiteDatabase db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.details);

    Intent intent = getIntent();
    filmID= intent.getStringExtra(MainActivity.FILM_ID_KEY);

    TextView txtFilm = (TextView) findViewById(R.id.txtFilm);
    TextView txtActor = (TextView) findViewById(R.id.txtActor);
    TextView txtActor2 = (TextView) findViewById(R.id.txtActor2);
    TextView txtDirector = (TextView) findViewById(R.id.txtDirector);
    TextView txtDescription = (TextView) findViewById(R.id.txtDescription);

    db = new DbHelper(this).getReadableDatabase();
    String[] columns = {"*"};
    String where = "id=?";
    String[] selArgs = {filmID};
    Cursor film = db.query("FILMTABLE", columns, where, selArgs, null, null, null);

    film.moveToNext();
    txtFilm.setText(film.getString(film.getColumnIndex("film")));
    txtActor.setText(film.getString(film.getColumnIndex("actor")));
    txtActor2.setText(film.getString(film.getColumnIndex("actor2")));
    txtDirector.setText(film.getString(film.getColumnIndex("director")));
    txtDescription.setText(film.getString(film.getColumnIndex("description")));
    db.close();


}

}

logcat的:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mnt.filmapp6/com.mnt.filmapp6.MainActivity4}: java.lang.IllegalArgumentException: the bind value at index 1 is null
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null
        at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)
        at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1240)
        at com.mnt.filmapp6.MainActivity4.onCreate(MainActivity4.java:33)
        at android.app.Activity.performCreate(Activity.java:5933)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

1 个答案:

答案 0 :(得分:0)

当您的查询运行时,会尝试将filmID绑定到id=?。显然它到那时仍然是null,这就是你按照Logcat获得异常的原因。

从逻辑上讲,此语句会产生null

filmID= intent.getStringExtra(MainActivity.FILM_ID_KEY);

您可以通过在此行后面添加断点来轻松确认这一点,以查看filmID确实是null

要检查的一些显而易见的事情:

  1. 您忘了拨打intent.putExtra(MainActivity.FILM_ID_KEY, filmID) {em} MainActivity4
  2. 您尝试使用错误的密钥检索值。那就是:id被放在一个不同的键下。