gpt4 book ai didi

Android - 基于EditText的数据库查询

转载 作者:行者123 更新时间:2023-11-30 00:37:29 26 4
gpt4 key购买 nike

我有这段代码可以从 EditText 获取值并查询数据库

主要 Activity :

public class MainActivity extends Activity {

private ArrayList<String> results = new ArrayList<String>();
private String tableName = "horarios";
private SQLiteDatabase newDB;
Button bt_search;
private ListView lv;

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

TestAdapter mDbHelper = new TestAdapter(getBaseContext());
mDbHelper.createDatabase();
bt_search = (Button)findViewById(R.id.btnsearch);
bt_search.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setContentView(R.layout.activity_main);
openAndQueryDatabase();
displayResultList();
}
});



}
public void back(View v) {

setContentView(R.layout.main);

}

private void displayResultList() {
lv = (ListView) findViewById(R.id.list);


ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
results );

lv.setAdapter(arrayAdapter);

}

private void openAndQueryDatabase() {
try {
EditText o = (EditText)findViewById(R.id.txtorigem);
EditText d = (EditText)findViewById(R.id.txtdestino);
String _origem = o.getText().toString();
String _destino = d.getText().toString();
DBHelper dbHelper = new DBHelper(this.getApplicationContext());
newDB = dbHelper.getWritableDatabase();
Cursor c = newDB.rawQuery("SELECT origem, destino, hora FROM " + tableName +" WHERE origem='"+_origem+"' and destino='"+_destino+"'", null);

if (c != null ) {
if (c.moveToFirst()) {
do {
String origem = c.getString(c.getColumnIndex("origem"));
String destino = c.getString(c.getColumnIndex("destino"));
String hora = c.getString(c.getColumnIndex("hora"));
results.add("Origem: " + origem + ", Destino: " + destino +" - Hora: "+hora);
}while (c.moveToNext());
}
}
} catch (SQLiteException se ) {
Log.e(getClass().getSimpleName(), "Could not create or Open the database");
} finally {
if (newDB != null)
newDB.close();
}
}
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/btn_back" >
</ListView>

<Button
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="Retroceder"
android:onClick="back" />

</RelativeLayout>

我尝试根据两个 EditText 的值查询数据库,但我做错了:

02-26 06:30:31.626: E/AndroidRuntime(14068): FATAL EXCEPTION: main
02-26 06:30:31.626: E/AndroidRuntime(14068): Process: com.example.app.arr, PID: 14068
02-26 06:30:31.626: E/AndroidRuntime(14068): java.lang.NullPointerException
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.example.app.arr.MainActivity.openAndQueryDatabase(MainActivity.java:70)
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.example.app.arr.MainActivity.access$0(MainActivity.java:66)
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.example.app.arr.MainActivity$1.onClick(MainActivity.java:39)
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.view.View.performClick(View.java:4438)
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.view.View$PerformClick.run(View.java:18422)
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.os.Handler.handleCallback(Handler.java:733)
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.os.Handler.dispatchMessage(Handler.java:95)
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.os.Looper.loop(Looper.java:136)
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-26 06:30:31.626: E/AndroidRuntime(14068): at java.lang.reflect.Method.invokeNative(Native Method)
02-26 06:30:31.626: E/AndroidRuntime(14068): at java.lang.reflect.Method.invoke(Method.java:515)
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-26 06:30:31.626: E/AndroidRuntime(14068): at dalvik.system.NativeStart.main(Native Method)

我意识到当我尝试从 EditText 获取值但无法找出解决方案时会显示此错误。MainActivity 第 70 行:String _origem = o.getText().toString();

最佳答案

问题是您正在尝试获取 txtorigemtxtdestino,但在此之前您正在使用 setContentView(R.layout.activity_main); ,它没有 EditTexts。在 setContentView 之前调用 openAndQueryDatabase();,假设 main 布局包含 txtorigem txtdestino

bt_search.setOnClickListener(new OnClickListener() { 
public void onClick(View v) {
openAndQueryDatabase();
setContentView(R.layout.activity_main);
displayResultList();
}
});

希望对你有帮助!

关于Android - 基于EditText的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22040161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com