Java 来自其他活动的信息

Java 来自其他活动的信息,java,android,Java,Android,我一直在寻找我的问题,但我找不到任何有助于我的情况。 我有一个带有ListView的活动,您可以在其中看到数据库中的人名,当您单击其中一个人名时,它应该转到另一个活动以显示详细信息,但当我单击该名称时,它会崩溃。上述代码: 第一项活动: 显示ListView中所有名称的代码正在运行 myview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v

我一直在寻找我的问题,但我找不到任何有助于我的情况。 我有一个带有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);  
                }
            });
第一个错误是:
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);