Java 来自其他活动的信息
我一直在寻找我的问题,但我找不到任何有助于我的情况。 我有一个带有ListView的活动,您可以在其中看到数据库中的人名,当您单击其中一个人名时,它应该转到另一个活动以显示详细信息,但当我单击该名称时,它会崩溃。上述代码: 第一项活动: 显示ListView中所有名称的代码正在运行Java 来自其他活动的信息,java,android,Java,Android,我一直在寻找我的问题,但我找不到任何有助于我的情况。 我有一个带有ListView的活动,您可以在其中看到数据库中的人名,当您单击其中一个人名时,它应该转到另一个活动以显示详细信息,但当我单击该名称时,它会崩溃。上述代码: 第一项活动: 显示ListView中所有名称的代码正在运行 myview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v
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);
}
});
第一个错误是:
java.lang.ClassCastException:java.lang.String无法强制转换为android.database.Cursor我怀疑您正在将
数组适配器设置为您的列表视图
,因此在下一行中,l.getItemAtPosition(position)
返回一个字符串,而不是光标
,强制转换失败
Cursor detalhes = (Cursor) l.getItemAtPosition(position);
问题是您试图在此行将字符串
强制转换为光标
Cursor detalhes = (Cursor) l.getItemAtPosition(position);
getItemAtPosition
将返回与列表中指定位置关联的数据
因此,在您的情况下,您已经传递了列表
数据
作为列表项的数据。因此,每个项都有一个字符串对象
String name = (String) l.getItemAtPosition(position);
如果您需要传递该项目的电子邮件。您可以为电子邮件创建一个ArrayList,然后像这样从数据库中添加它
List<String> emailLists = new ArrayList<String>();
现在,选择项目后,从ArrayList
String email = emailLists.get(position);
l.getItemAtPosition(position)
返回的是字符串,而不是光标。另外,您应该在onCreate()
中调用setContentView()
。是的,我有一个返回字符串的ArrayAdaptar。你知道这样做的方法吗?我做了,但是它在getColumnIndex中给了我一个错误。表示字符串类型未定义。是。不能对字符串使用getColumnIndex。您只在列表中添加了名称。getItemAtPosition将返回您的姓名谢谢,它正在工作。现在我有另一个问题,我还想回复那个人的电子邮件,但他在两个文本视图中都重复了这个名字。请看,我的最新答案。这是唯一可能的方法,因为您不使用自定义适配器,并且getItemAtPosition只能返回字符串,因为ArrayAdapter只能保存一个数组列表请参见我的更新问题。我确实做过你说过并尝试过其他事情,但当我点击名字查看详细信息时,它崩溃了。我理解的一个错误是:Process:com.example.listview,PID:2886 java.lang.NullPointerException
List<String> emailLists = new ArrayList<String>();
data.add(cursor.getString(cursor.getColumnIndex("email")));
String email = emailLists.get(position);