因此,我正在制作一个行程类型的应用程序,用户在该行程中制作行程并在一个行程中包含多个条目。所以我需要能够从一个行程中检索所有数据。例如,如果行程被称为星期一,并且用户选择该行程来查看,我会希望从中得到所有的数据。我通过使用ItineraryName来完成此操作,例如星期一,被传递给另一个活动,这工作,但我只看到通过打印语句来检查值已通过正确。Android studio SQLite数据库特定条目的数据检索
目前,我可以查看特定行程的数据,例如,星期一,只有当我手动输入到选择参数变量(见下文),但如果我尝试通过它通过一个变量它不会工作,我得到一个错误,我也尝试把“%”+ ItineraryName +“%”到选择参数,但我提出了一个空白的活动。误差只是变量:
过程:com.example.chiraag.qavel,PID:10198 了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.chiraag.qavel/com.example.chiraag.qavel .ItineraryDetails}:java.lang.IllegalArgumentException:索引1处的绑定值为null at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) (android.app.ActivityThread.Office.app.ActivityThread.Office11(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handl er.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(本地方法) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 由java导致:java .lang.IllegalArgumentException:索引1处的绑定值为null at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164) at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200) 在android.database.sqlite.SQLiteDirec tCursorDriver.query(SQLiteDirectCursorDriver.java:47) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:400) at android。 database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:294) at com.example.chiraag.qavel.DBManager.Query(DBManager.java:101) at com.example.chiraag.qavel.ItineraryDetails.loadItinerary(ItineraryDetails。 java:47) at com.example.chiraag.qavel.ItineraryDetails.onCreate(ItineraryDetails.java:34) at android.app.Activity.performCreate(Activity.java:6237) at android.app.Instrumentation.callActivityOnC在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11 (ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper .java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method。调用(本地方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
代码ItineraryDetails:
public class ItineraryDetails extends AppCompatActivity {
DBManager db;
myAdapter myAdapter;
ListView ls;
private String ItineraryName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_itinerary_details);
db = new DBManager(this);
ls = (ListView)findViewById(R.id.ItineraryDetails_listview);
loadItinerary();
Bundle bundle = getIntent().getExtras();
ItineraryName = bundle.getString("Name");
System.out.println("Name " + ItineraryName);
}
public void loadItinerary(){
ArrayList<Adapter> listData = new ArrayList<Adapter>();
listData.clear();
String []selectionargs = {ItineraryName};
Cursor cursor = db.Query("Itinerary",null, "ItineraryName like ?", selectionargs , DBManager.ColId);
if (cursor.moveToFirst()) {
do {
listData.add(new Adapter(
null
, cursor.getString(cursor.getColumnIndex(DBManager.ColName))
, cursor.getString(cursor.getColumnIndex(DBManager.ColLocation))
, null
, null
, null
,cursor.getString(cursor.getColumnIndex(DBManager.ColTime))
,null,null, null, null
,null
,null));
} while (cursor.moveToNext());
}
myAdapter = new myAdapter(listData);
ls.setAdapter(myAdapter);
}
class myAdapter extends BaseAdapter {
public ArrayList<Adapter> listItem;
Adapter ac;
public myAdapter(ArrayList<Adapter> listItem) {
this.listItem = listItem;
}
@Override
public int getCount() {
return listItem.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
LayoutInflater myInflator = getLayoutInflater();
final View myView = myInflator.inflate(R.layout.list_items_itinerary_details, null);
ac = listItem.get(position);
TextView ItineraryName = (TextView) myView.findViewById(R.id.tvItineraryDetailsEntryName);
ItineraryName.setText(ac.Name);
TextView ItineraryLocation = (TextView) myView.findViewById(R.id.tvItineraryDetailsEntryLocation);
ItineraryLocation.setText(ac.Location);
TextView ItineraryTime = (TextView)myView.findViewById(R.id.tvItineraryDetailsEntryTime);
ItineraryTime.setText(ac.Time);
return myView;
}
}
}
代码DBManager:
public class DBManager {
private SQLiteDatabase sqlDB;
static final String ColId = "ID";
static final String DBName = "InternalDB";
static final String TableName = "BookmarkAttraction";
static final String TableName2 = "BookmarkTransport";
static final String TableName3 = "Itinerary";
static final String ColItineraryName = "ItineraryName";
static final String ColDate = "Date";
static final String ColType = "Type";
static final String ColName = "Name";
static final String ColLocation = "Location";
static final String ColOpening = "OpeningTime";
static final String ColClosing = "ClosingTime";
static final String ColNearbyStop = "NerbyStop1";
static final String ColTime = "Time";
static final String ColNextStop = "NextStop";
static final String ColPhoneNumber = "PhoneNumber";
static final int DBVersion = 1;
static final String CreateTable = "CREATE TABLE IF NOT EXISTS " + TableName + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + ColType+ " TEXT," +
ColName+ " TEXT," + ColLocation+ " TEXT," + ColOpening+ " TEXT," +ColClosing+ " TEXT," + ColNearbyStop+ " TEXT);";
static final String CreateTabe2 = "CREATE TABLE IF NOT EXISTS " +TableName2 + "(ID INTEGER PRIMARY KEY AUTOINCREMENT,"
+ ColType + " TEXT,"
+ ColName + " TEXT,"
+ ColLocation + " TEXT,"
+ ColTime+ " TEXT,"
+ ColNextStop + " TEXT,"
+ ColPhoneNumber + " TEXT);";
static final String CreateTable3 = "CREATE TABLE IF NOT EXISTS " + TableName3 + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + ColItineraryName + " TEXT,"
+ ColDate + " TEXT," + ColName + " TEXT," + ColLocation + " TEXT," + ColTime + " TEXT);";
static class DBHelper extends SQLiteOpenHelper{
Context context;
DBHelper(Context context){
super(context, DBName, null, DBVersion);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
Toast.makeText(context,DBName,Toast.LENGTH_LONG).show();
db.execSQL(CreateTable);
Toast.makeText(context,"Table is created ", Toast.LENGTH_LONG).show();
db.execSQL(CreateTabe2);
Toast.makeText(context,"Transport table created", Toast.LENGTH_LONG).show();
db.execSQL(CreateTable3);
Toast.makeText(context,"Itin table created", Toast.LENGTH_LONG).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("DROP TABLE IF EXISTS" + TableName);
db.execSQL("DROP TABLE IF EXISTS" + TableName2);
db.execSQL("DROP TABLE IF EXISTS" + TableName3);
onCreate(db);
}
}
public DBManager(Context context){
DBHelper db = new DBHelper(context);
sqlDB = db.getWritableDatabase();
}
public long Insert(String tablename,ContentValues values){
long ID = sqlDB.insert(tablename,"",values);
return ID;
}
public Cursor Query(String tablename, String [] projection, String selection, String [] selectionArgs, String sortOrder){
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(tablename);
Cursor cursor = qb.query(sqlDB,projection, selection, selectionArgs,null,null,sortOrder);
return cursor;
}
public int Delete(String tablename,String selection, String[] selectionArgs){
int count = sqlDB.delete(tablename,selection,selectionArgs);
return count;
}
}
错误指向我的DBManager类我的查询方法,我可能已经结构化的错,我不知道,因为我第一次创建它重新处理表中的所有数据。任何帮助,这将是非常感谢你。
谢谢你做了工作,不知道我怎么没有看到 – Sam