我一直在搜索我的问题,但我无法找到任何可以帮助我解决问题的方法。 我有一个ListView活动,您可以在其中查看数据库中的人员名称,当您单击其中一个名称时,它应该转到另一个活动以显示详细信息,但是当我单击该名称时它会崩溃。上面的代码:
第一项活动: 显示ListView中所有名称的代码正在运行
myview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Toast.makeText(getApplicationContext(), "clicked", 3000).show();
setContentView(R.layout.fragment_vertodos);
lv=(ListView) findViewById(R.id.listone);
Cursor cursor=mydb.rawQuery("SELECT * FROM teste;", null);
if(cursor.moveToFirst()){
Toast.makeText(getApplicationContext(), "Nome:", 3000).show();
data.clear();
do{
data.add(cursor.getString(cursor.getColumnIndex("name")));
}while (cursor.moveToNext());
ArrayAdapter <String> adapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,data);
lv.setAdapter(adapter);
}
else{
Toast.makeText(getApplicationContext(), "DATA NOT AVAILABLE", 3000).show();
}
cursor.close();}
});
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> l, View v, int position,long id) {
// TODO Auto-generated method stub
String name = (String) l.getItemAtPosition(position);
List<String> emailLists = new ArrayList<String>();
emailLists.add(cursor.getString(cursor.getColumnIndex("email")));
String email = emailLists.get(position);
Intent intent = new Intent(MainActivity.this, Detalhes.class);
intent.putExtra("name",name);
intent.putExtra("email",email);
startActivity(intent);
}
});
我的问题是现在。我创建了第二个获取信息的活动,但却发出错误:
第二项活动:
txname = (TextView)findViewById(R.id.txtnome);
txmail = (TextView)findViewById(R.id.txtmail);
Bundle b = getIntent().getExtras();
if(b!=null){
String n =(String) b.get("name");
String m =(String) b.get("email");
txname.setText(n);
txmail.setText(m);
}
第一个错误是: java.lang.ClassCastException:java.lang.String无法强制转换为android.database.Cursor
答案 0 :(得分:0)
我怀疑您正在为ArrayAdapter<String>
设置ListView
,因此,在以下行中,l.getItemAtPosition(position)
会返回String
,而不是Cursor
,并且演员失败了。
Cursor detalhes = (Cursor) l.getItemAtPosition(position);
答案 1 :(得分:0)
The first error is: java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor
问题是您尝试在此行输入String
到Cursor
Cursor detalhes = (Cursor) l.getItemAtPosition(position);
getItemAtPosition
将返回与列表中指定位置相关联的数据。
因此,在您的情况下,您已将List<String>
data
作为列表项的数据。所以每个项目都有字符串对象
String name = (String) l.getItemAtPosition(position);
如果您需要传递该项目的电子邮件。您可以为电子邮件创建一个ArrayList,并像这样从数据库中添加它。
List<String> emailLists = new ArrayList<String>();
然后,将电子邮件添加到列表中
data.add(cursor.getString(cursor.getColumnIndex("email")));
现在,选择项目后,从ArrayList
String email = emailLists.get(position);