我正在尝试从 ListView 中的选定项目设置 ContextMenu 的标题。但是,每次我在模拟器上运行它时,它都会崩溃,我必须强制关闭它。DDMS 显示抛出了未捕获的 java.lang.NullPointerException。我的 DbTest.java 类可能有问题吗?我已经在 DbTest.java 类中定义了所有数据库操作。
注意:此行可能会引发异常:-
Cursor mCursor = (Cursor) getListAdapter().getItem(info.position);
请查看我的代码并指出错误。
package com.tintin.prototype_2;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
public class Contact_LA extends ListActivity {
DbTest db;
SimpleCursorAdapter dataAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.check);
db = new DbTest(this);
displayList();
}
public void onResume(){
Cursor newCursor = db.getallContacts();
dataAdapter.changeCursor(newCursor);
super.onResume();
}
public void displayList(){
Cursor cursor = db.getallContacts();
String columns[] = new String[] {db.Name, db.Number};
int to[] = new int[] {R.id.textView1, R.id.textView2};
dataAdapter = new SimpleCursorAdapter(this, R.layout.check_layout, cursor, columns, to, 0);
//ListView lv = (ListView) findViewById(R.id.list);
ListView lv = getListView();
lv.setAdapter(dataAdapter);
registerForContextMenu(lv);
Button b = (Button) findViewById(R.id.AddContact);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
startActivity(new Intent(Contact_LA.this, Contact_Add.class));
}
});
db.close();
}
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo info;
try{
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
}catch(ClassCastException e){
Log.v("BAD", "Bad Info");
return;
}
Cursor mCursor = (Cursor) getListAdapter().getItem(info.position);
if(mCursor == null)return;
menu.setHeaderTitle(mCursor.getString(mCursor.getColumnIndex("Name")));
menu.add(0, v.getId(), 0, "Delete");
}
}