Android 如何使用customadapter从带有映像的数据库中获取特定记录
大家好,我是android的新手,我已经完成了从数据库中搜索特定记录的代码,并使用简单的光标适配器显示它的列表,以获得图像和数据,我开始使用自定义适配器,当我尝试从数据库中检索所有数据时,代码工作得非常好,但当我将参数传递给数据库中的方法以搜索特定记录并在列表中显示它时,会出现错误 这是我的密码 当用户选择要显示的数据时传递的代码Android 如何使用customadapter从带有映像的数据库中获取特定记录,android,android-listview,android-asynctask,nullpointerexception,custom-adapter,Android,Android Listview,Android Asynctask,Nullpointerexception,Custom Adapter,大家好,我是android的新手,我已经完成了从数据库中搜索特定记录的代码,并使用简单的光标适配器显示它的列表,以获得图像和数据,我开始使用自定义适配器,当我尝试从数据库中检索所有数据时,代码工作得非常好,但当我将参数传递给数据库中的方法以搜索特定记录并在列表中显示它时,会出现错误 这是我的密码 当用户选择要显示的数据时传递的代码 Intent i= new Intent(SearchByBed.this,SearchBedView.class); Bundle bbed= ne
Intent i= new Intent(SearchByBed.this,SearchBedView.class);
Bundle bbed= new Bundle();
bbed.putString("bedValue", spinn_Bed.getSelectedItem().toString());
i.putExtras(bbed);
startActivity(i);
在这一部分中,从上一个类传递的参数是catch,然后传递给db,希望检索记录并将其绑定到自定义适配器
my asynctask code
public class loadSomeStuff extends AsyncTask<String, Integer, String> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
dialog = new ProgressDialog(SearchBedView.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(100);
dialog.setMessage("Loading Data");
dialog.show();
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
dialog.incrementProgressBy(values[0]);
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
for (int i = 0; i < 20; i++) {
publishProgress(5);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
dialog.dismiss();
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
displaydemo();
}
}
public void displaydemo() {
// TODO Auto-generated method stub
Bundle bbedview = this.getIntent().getExtras();
name = bbedview.getString("name").toString();
//data.setText(name); //as per log here i was getting null pointer exception but
//know commented as it was line from my previous code
info = new PropertyInfo(this);
info.open();
cursor = info.getBed(name);
String[] from = new String[] { PropertyInfo.KEY_ROWID,
PropertyInfo.KEY_TYPE, PropertyInfo.KEY_BEDROOMS,
PropertyInfo.KEY_STATUS, PropertyInfo.KEY_CITY,
PropertyInfo.KEY_FURNISHING, PropertyInfo.KEY_TOTPRICE };
int[] to = new int[] { R.id.rowId, R.id.rowtype, R.id.rowBed,
R.id.rowStatus, R.id.rowCity, R.id.rowFurnish,
R.id.rowTotalPrice };
custAdapter = new CustomContactsAdapterBedView(this, R.layout.row, cursor,
from, to);
this.setListAdapter(custAdapter);
}
数据库中的方法如下所示
public Cursor getBed(String l) {
String[] columns = new String[] { KEY_ROWID, KEY_TITLE, KEY_TYPE,
KEY_BEDROOMS, KEY_STATUS, KEY_CITY, KEY_LOCALITY, KEY_PRICE,
KEY_TOTPRICE, KEY_FURNISHING, KEY_BALCONIES, KEY_BATHROOM,
IMAGE };
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_BEDROOMS
+ "=" + l, null, null, null, null);
return c;
}
logcat中的错误是
05-16 20:33:43.803: E/AndroidRuntime(31444): FATAL EXCEPTION: main
05-16 20:33:43.803: E/AndroidRuntime(31444): java.lang.NullPointerException
05-16 20:33:43.803: E/AndroidRuntime(31444): at
com.project.realestate.SearchBedView.displaydemo(SearchBedView.java:299)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
com.project.realestate.SearchBedView$loadSomeStuff.onPostExecute(SearchBedView.java:281)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
com.project.realestate.SearchBedView$loadSomeStuff.onPostExecute(SearchBedView.java:1)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
android.os.AsyncTask.finish(AsyncTask.java:631)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
android.os.AsyncTask.access$600(AsyncTask.java:177)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
android.os.Handler.dispatchMessage(Handler.java:99)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
android.os.Looper.loop(Looper.java:137)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
android.app.ActivityThread.main(ActivityThread.java:5041)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
java.lang.reflect.Method.invokeNative(Native Method)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
java.lang.reflect.Method.invoke(Method.java:511)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-16 20:33:43.803: E/AndroidRuntime(31444): at
dalvik.system.NativeStart.main(Native Method)
请帮我写代码
data.setText(name);
我猜数据是EditText或textView你有findViewById对它的引用吗
您必须用单引号和转义序列将字符串值括起来,我已经修改了行
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_BEDROOMS
+ "=\'" +l+"\'", null, null, null, null);
您在哪里为TextView(或任何小部件)定义了“数据”
它的定义如下:
TextView数据=(TextView)findViewById(R.id.yourTextView)嘿,有人请帮忙PPP你应用了AsyncTask吗???@bhavana是的,就像从数据库加载数据之前一样我在onpreexecute和onpostexecute中显示了一个进度条,我调用了方法名displaydemo,其完整代码是在topok中编写的……然后检查传递给Async类的值……可能你传递的值是null…这就是应用程序崩溃的原因。@bhavana c我正在进行选择,以便从一个类中显示哪一行,并使用bundle将其传递给另一个类我在SimpleCorsorAdapter中也使用过它,但知道它在获取时显示null值,因此无法获取我应该写入的内容。Rok我已删除数据(textview)小部件,因为我在以前的代码格式中使用它,所以问题得到解决,但尽管我的db有这样的数据,但它不显示recordOk,我删除了数据(textview)小部件,因为我在以前的代码格式中使用它,所以问题得到解决,但尽管我的db有这样的数据,它不显示该记录
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_BEDROOMS
+ "=\'" +l+"\'", null, null, null, null);