单击viewList中的项目。。使用android数据库中的数据打开新活动
当我在另一个工作正常的活动中单击列表中的项目时,我有此代码来显示我的图书数据库中的详细信息。。 我使用了这个代码来实现。。 但它不起作用! 有人能告诉我我的代码有什么问题吗??? 我想当我点击项目时,它会转到详细信息活动并显示所选书籍的其余详细信息。 请帮忙:(! 谢谢大家!单击viewList中的项目。。使用android数据库中的数据打开新活动,android,eclipse,listview,android-sqlite,onitemclicklistener,Android,Eclipse,Listview,Android Sqlite,Onitemclicklistener,当我在另一个工作正常的活动中单击列表中的项目时,我有此代码来显示我的图书数据库中的详细信息。。 我使用了这个代码来实现。。 但它不起作用! 有人能告诉我我的代码有什么问题吗??? 我想当我点击项目时,它会转到详细信息活动并显示所选书籍的其余详细信息。 请帮忙:(! 谢谢大家! package com.example.test; import android.app.Activity; import android.database.Cursor; import android.database
package com.example.test;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.TextView;
public class BookDetails extends Activity {
protected TextView name;
protected TextView author;
protected TextView isbn;
protected TextView copy;
protected TextView info;
protected int bookId;
private DbHelper mHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.book_details);
bookId = getIntent().getIntExtra("bID", 0);
SQLiteDatabase db = mHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM "+ DbHelper.TABLE_NAME, null);
if (cursor.getCount() == 1)
{
cursor.moveToFirst();
name = (TextView) findViewById(R.id.name);
name.setText(cursor.getString(cursor.getColumnIndex("KEY_NAME")));
author = (TextView) findViewById(R.id.author);
author.setText(cursor.getString(cursor.getColumnIndex("KEY_AUTHOR")));
isbn = (TextView) findViewById(R.id.isbn);
isbn.setText(cursor.getString(cursor.getColumnIndex("KEY_ISBN")));
copy = (TextView) findViewById(R.id.copy);
copy.setText(cursor.getString(cursor.getColumnIndex("KEY_COPIES")));
info = (TextView) findViewById(R.id.info);
info.setText(cursor.getString(cursor.getColumnIndex("KEY_INFO")));
}
}
}
下面是DisplayActivity.java
package com.example.test;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class DisplayActivity extends Activity {
private DbHelper mHelper;
private SQLiteDatabase dataBase;
private ListAdapter adapter;
private ArrayList<String> bookId = new ArrayList<String>();
private ArrayList<String> book_Name = new ArrayList<String>();
private ArrayList<String> book_Author = new ArrayList<String>();
private ArrayList<String> book_Info = new ArrayList<String>();
private ArrayList<String> book_Isbn = new ArrayList<String>();
private ArrayList<String> book_Copy = new ArrayList<String>();
public static String bNAME="bname";
public static String bAUTHOR="bauthor";
public static String bISBN="bisbn";
public static String bCOPY="bcopy";
public static String bINFO="binfo";
public static String bID="ID";
private ListView userList;
private AlertDialog.Builder build;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_activity);
userList = (ListView) findViewById(R.id.List);
mHelper = new DbHelper(this);
userList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Intent intent = new Intent(view.getContext(),BookDetails.class);
Cursor cursor = (Cursor) adapter.getItem(position);
intent.putExtra("bID", cursor.getInt(cursor.getColumnIndex("KEY_ID")));
startActivity(intent);
}
});}
@Override
protected void onResume() {
displayData();
super.onResume();
}
/**
* displays data from SQLite
*/
private void displayData() {
dataBase = mHelper.getWritableDatabase();
Cursor mCursor = dataBase.rawQuery("SELECT * FROM "
+ DbHelper.TABLE_NAME, null);
bookId.clear();
book_Name.clear();
book_Author.clear();
book_Isbn.clear();
book_Copy.clear();
book_Info.clear();
if (mCursor.moveToFirst()) {
do {
bookId.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ID)));
book_Name.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_NAME)));
book_Author.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_AUTHOR)));
book_Isbn.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ISBN)));
book_Copy.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_COPIES)));
book_Info.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_INFO)));
} while (mCursor.moveToNext());
}
DisplayAdapter disadpt = new DisplayAdapter(DisplayActivity.this,bookId, book_Name);
userList.setAdapter(disadpt);
mCursor.close();
}
}
您应该在
onCreate
函数中displayData()
,即
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_activity);
userList = (ListView) findViewById(R.id.List);
mHelper = new DbHelper(this);
displayData();
userList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Intent intent = new Intent(DisplayActivity.this,BookDetails.class);
Cursor cursor = (Cursor) parent.getItem(position);
intent.putExtra("bID", cursor.getInt(cursor.getColumnIndex("KEY_ID")));
startActivity(intent);
}
});
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.display_活动);
userList=(ListView)findViewById(R.id.List);
mHelper=新的DbHelper(this);
显示数据();
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
意向意向=新意向(DisplayActivity.this,BookDetails.class);
Cursor Cursor=(Cursor)parent.getItem(position);
intent.putExtra(“bID”,cursor.getInt(cursor.getColumnIndex(“KEY_ID”));
星触觉(意向);
}
});
}
这里指出了问题:
11-25 03:02:55.818: E/AndroidRuntime(2734): java.lang.NullPointerException
11-25 03:02:55.818: E/AndroidRuntime(2734): at com.example.test.DisplayActivity$1.onItemClick(DisplayActivity.java:58)
从您的代码中可以清楚地看到,private ListAdapter;
没有在任何地方使用/初始化,而是初始化适配器disadpt=new displayapter(DisplayActivity.this,bookId,book_Name);
,这样您就可以将适配器更改为使用正确的适配器
显示活动代码:
public class DisplayActivity extends Activity {
private DbHelper mHelper;
private SQLiteDatabase dataBase;
private DisplayAdapter disadpt; // <--- one change here
private ArrayList<String> bookId = new ArrayList<String>();
private ArrayList<String> book_Name = new ArrayList<String>();
private ArrayList<String> book_Author = new ArrayList<String>();
private ArrayList<String> book_Info = new ArrayList<String>();
private ArrayList<String> book_Isbn = new ArrayList<String>();
private ArrayList<String> book_Copy = new ArrayList<String>();
public static String bNAME = "bname";
public static String bAUTHOR = "bauthor";
public static String bISBN = "bisbn";
public static String bCOPY = "bcopy";
public static String bINFO = "binfo";
public static String bID = "ID";
private ListView userList;
private AlertDialog.Builder build;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_activity);
userList = (ListView) findViewById(R.id.List);
mHelper = new DbHelper(this);
userList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(disadpt == null) return; // avoid crashes if not initialized
Intent intent = new Intent(DisplayActivity.this, BookDetails.class); // <-- better use activity context
Cursor cursor = (Cursor) disadpt.getItem(position);
intent.putExtra("bID", cursor.getInt(cursor.getColumnIndex(DbHelper.KEY_ID))); // <--- also this seems faulty you do not have any column named "KEY_ID"
startActivity(intent);
}
});
}
@Override
protected void onResume() {
displayData();
super.onResume();
}
/**
* displays data from SQLite
*/
private void displayData() {
dataBase = mHelper.getWritableDatabase();
Cursor mCursor = dataBase.rawQuery("SELECT * FROM "
+ DbHelper.TABLE_NAME, null);
bookId.clear();
book_Name.clear();
book_Author.clear();
book_Isbn.clear();
book_Copy.clear();
book_Info.clear();
if (mCursor.moveToFirst()) {
do {
bookId.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ID)));
book_Name.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_NAME)));
book_Author.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_AUTHOR)));
book_Isbn.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ISBN)));
book_Copy.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_COPIES)));
book_Info.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_INFO)));
} while (mCursor.moveToNext());
}
// Another change here v
disadpt = new DisplayAdapter(DisplayActivity.this, bookId, book_Name);
userList.setAdapter(disadpt);
mCursor.close();
}
}
公共类DisplayActivity扩展活动{
私人家庭佣工;
专用数据库;
private DisplayAdapter disadpt;//请定义它不起作用
?@Lawrence Choy如果我单击listpost logcat错误消息上的项目,应用程序将停止并退出。@MukeshKumar我刚刚编辑了我的帖子并将logcat添加到其中。。可以看出问题是DisplayActivity.jav中的NullPointerException
a:58
,DisplayActivity.java:58
的第58行是什么?你应该发布DisplayActivity的代码我试过这个..现在当我点击这个项目时,应用程序不会停止..但什么也不做!我想让它启动另一个活动并查看数据库中的其余数据您对代码做了所有更改吗,即使是最后一次更改displayData()
method?它不起作用,因为disadpt
似乎仍然是空的,代码返回;
在代码中添加一些日志,看看它在哪里中断,例如Log.d(“你的_标签”,“你的消息=+任何_值”)
对不起,我不知道这是怎么回事。你能给我解释一下吗?
public class DisplayActivity extends Activity {
private DbHelper mHelper;
private SQLiteDatabase dataBase;
private DisplayAdapter disadpt; // <--- one change here
private ArrayList<String> bookId = new ArrayList<String>();
private ArrayList<String> book_Name = new ArrayList<String>();
private ArrayList<String> book_Author = new ArrayList<String>();
private ArrayList<String> book_Info = new ArrayList<String>();
private ArrayList<String> book_Isbn = new ArrayList<String>();
private ArrayList<String> book_Copy = new ArrayList<String>();
public static String bNAME = "bname";
public static String bAUTHOR = "bauthor";
public static String bISBN = "bisbn";
public static String bCOPY = "bcopy";
public static String bINFO = "binfo";
public static String bID = "ID";
private ListView userList;
private AlertDialog.Builder build;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_activity);
userList = (ListView) findViewById(R.id.List);
mHelper = new DbHelper(this);
userList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(disadpt == null) return; // avoid crashes if not initialized
Intent intent = new Intent(DisplayActivity.this, BookDetails.class); // <-- better use activity context
Cursor cursor = (Cursor) disadpt.getItem(position);
intent.putExtra("bID", cursor.getInt(cursor.getColumnIndex(DbHelper.KEY_ID))); // <--- also this seems faulty you do not have any column named "KEY_ID"
startActivity(intent);
}
});
}
@Override
protected void onResume() {
displayData();
super.onResume();
}
/**
* displays data from SQLite
*/
private void displayData() {
dataBase = mHelper.getWritableDatabase();
Cursor mCursor = dataBase.rawQuery("SELECT * FROM "
+ DbHelper.TABLE_NAME, null);
bookId.clear();
book_Name.clear();
book_Author.clear();
book_Isbn.clear();
book_Copy.clear();
book_Info.clear();
if (mCursor.moveToFirst()) {
do {
bookId.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ID)));
book_Name.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_NAME)));
book_Author.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_AUTHOR)));
book_Isbn.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ISBN)));
book_Copy.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_COPIES)));
book_Info.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_INFO)));
} while (mCursor.moveToNext());
}
// Another change here v
disadpt = new DisplayAdapter(DisplayActivity.this, bookId, book_Name);
userList.setAdapter(disadpt);
mCursor.close();
}
}