我创建了一个电影数据库应用程序,用户可以在其中搜索电影,结果将显示在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)
答案 0 :(得分:0)
当您的查询运行时,会尝试将filmID
绑定到id=?
。显然它到那时仍然是null
,这就是你按照Logcat获得异常的原因。
从逻辑上讲,此语句会产生null
:
filmID= intent.getStringExtra(MainActivity.FILM_ID_KEY);
您可以通过在此行后面添加断点来轻松确认这一点,以查看filmID
确实是null
。
要检查的一些显而易见的事情:
intent.putExtra(MainActivity.FILM_ID_KEY, filmID)
{em} MainActivity4
。