来自其他活动的信息

时间:2014-04-16 13:30:48

标签: java android

我一直在搜索我的问题,但我无法找到任何可以帮助我解决问题的方法。 我有一个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

2 个答案:

答案 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

问题是您尝试在此行输入StringCursor

 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);