我是android开发的新手。我有一个sqllite表,包含id,name,number。
我尝试做以下事情:
我可以列出名字(第一个)。但是当单击列表中的名称时,logcat会显示以下错误。
09-25 06:42:24.071: E/AndroidRuntime(32364): java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor
Details.java
public class Details extends ListActivity {
private DetailOperations detailDBoperation;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
detailDBoperation=new DetailOperations(this);
detailDBoperation.open();
final ListView list=(ListView) findViewById(android.R.id.list);
List<Detail> values=detailDBoperation.getAllDetails();
List<String> names=new ArrayList<String>();
for(int i=0;i<values.size();i++)
{
names.add(values.get(i).getName());
}
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,names);
list.setAdapter(adapter);
//click on the list item
list.setClickable(true);
list.setTextFilterEnabled(true);
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
Cursor cursor=(Cursor) list.getItemAtPosition(position);
TextView text1=(TextView) findViewById(R.id.nametext);
text1.setText(cursor.getString(1).toString());
TextView text2=(TextView)findViewById(R.id.numbertext);
text2.setText(cursor.getString(2).toString());
openDetails();
/* AlertDialog.Builder adb=new AlertDialog.Builder(Details.this);
adb.setTitle("ListView OnClick");
adb.setMessage("Selected item="+ list.getItemAtPosition(position));
adb.setPositiveButton("Ok",null);
adb.show();
*/
}
});
}
public void openDetails(){
Intent intent=new Intent(this,ShowDetails.class);
startActivity(intent);
}
@Override
protected void onResume(){
detailDBoperation.open();
super.onResume();
}
@Override
protected void onPause(){
detailDBoperation.close();
super.onPause();
}
}
showDetails.java
public class ShowDetails extends Activity{
public void onCreate(Bundle savedInstaceState){
super.onCreate(savedInstaceState);
setContentView(R.layout.showdetails);
}
}
details.xml
<ListView
android:cacheColorHint="#00000000"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@android:id/list"
android:layout_alignParentLeft="true"
android:textSize="15dp" >
</ListView>
showdetails.xml
<TextView
android:id="@+id/nametext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/numbertext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
答案 0 :(得分:1)
如果您尝试将值发送到新活动,则应执行以下操作:
像这样更改您的详细信息方法:
public void openDetails(String name, String number)
{
Intent intent=new Intent(this,ShowDetails.class);
intent.putExtra("name", name);
intent.putExtra("number", number);
startActivity(intent);
}
在新活动的onCreate中,执行以下操作:
String name = getIntent().getExtras().getString("name");
String number = getIntent().getExtras().getString("number");
TextView nameText = (TextView)findViewById(R.id.nametext);
TextView numberText = (TextView)findViewById(R.id.numbertext);
nameText.setText(name);
numberText.setText(number); // I'm assuming you've already created instances of these textviews.
此外,您需要传递名称&amp; openDetails
方法中onItemClick
方法的数字参数,如下所示:
list.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
Cursor cursor=(Cursor) list.getItemAtPosition(position);
TextView text1=(TextView) findViewById(R.id.nametext);
String name = cursor.getString(1).toString();
//text1.setText(name);
TextView text2=(TextView)findViewById(R.id.numbertext);
String number = cursor.getString(2).toString();
//text2.setText(number);
openDetails(name, number);
/* AlertDialog.Builder adb=new AlertDialog.Builder(Details.this);
adb.setTitle("ListView OnClick");
adb.setMessage("Selected item="+ list.getItemAtPosition(position));
adb.setPositiveButton("Ok",null);
adb.show();
*/
}
});
希望这会有所帮助:)
答案 1 :(得分:0)
您正在将String array
传递给Arrayadapter
并期望它将cursor
返回到数据库表吗?
在 OnItemClick()中,此行导致此异常:
Cursor cursor=(Cursor) list.getItemAtPosition(position);
您可以做的是,在List<Detail> values
之外声明onCreate()
并按照以下步骤操作:
TextView text1=(TextView) findViewById(R.id.nametext);
text1.setText(values.get(position).getName());
TextView text2=(TextView)findViewById(R.id.numbertext);
text2.setText(values.get(position).getNumber());
答案 2 :(得分:0)
在OnItemClick方法中,您有以下行:
Cursor cursor=(Cursor) list.getItemAtPosition(position);
list.getItemAtPosition(position)
的结果是一个字符串,但您正在尝试将其转换为游标。
因此您收到错误:
java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor