2013-09-25 3 views
0

나는 안드로이드 개발에 새로운입니다. 나는 sqllite에있는 테이블을 가지고 있으며, id, name, number를 포함하고있다. 내가안드로이드에서 목록보기에서 항목을 선택하십시오.

는 다음과 같은 일을하려고 : 테이블의

  1. 목록 이름을.
  2. 특정 이름을 클릭하고 다른 XML 페이지로 이동하여 이름과 번호를 표시하십시오.

이름을 나열 할 수 있습니다 (첫 번째 이름). 그러나 목록에서 이름을 클릭하면 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> 
012 3,516,

showdetails.xml 당신은 Arrayadapter-String array을 전달하고 데이터베이스 테이블에 cursor를 반환 할 것으로 예상된다

<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

당신 다음 줄을 사용하십시오.

Cursor cursor=(Cursor) list.getItemAtPosition(position); 

list.getItemAtPosition(position)의 결과는 문자열이지만 커서로 변환하려고합니다.

당신 때문에 오류가 나타납니다

이 같은

변경하여 자세한 방법 : 새 활동에 값을 보내려고하는 경우

java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor 
+0

그러면이 이름과 번호를 어떻게 받아 들일 수 있습니까? – neel

0

?

OnItemClick()에서이 줄이 예외를 일으키는 :

Cursor cursor=(Cursor) list.getItemAtPosition(position); 

당신이 할 수있는 것은, List<Detail> values 외부 onCreate()을 선언하고이 따르 당신의 OnItemClick 방법에서

 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()); 
+0

그럼 내가 데이터베이스에서 번호를 얻을 수 – neel

+0

왜 투표? –

+0

** 다운 투표가이 다운 투표의 이유를 밝혀 줄 수 있습니까? ** 답변에 어떤 문제가 있습니까? –

1

, 당신은이 작업을 수행해야

을 새로운 활동의에서 onCreate에서

public void openDetails(String name, String number) 
{ 
    Intent intent=new Intent(this,ShowDetails.class); 
    intent.putExtra("name", name); 
    intent.putExtra("number", number); 
    startActivity(intent); 
} 
은 이렇게 :

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. 
또한

,이처럼 onItemClick 방법에서 openDetails 방법에 이름 & 번호 매개 변수를 전달해야합니다 :

list.setOnItemClickListener를 (새 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(); 
       */ 

    } 
}); 

희망이 도움이 :)

+0

감사합니다. 하나의 의심 스럽지만, onItemClick()에서 OpenDetail()으로 전달되는 값은 무엇입니까? TextView 유형 na – neel

+0

내 전화 응답을 편집하여 전화를 걸었습니다. –

+0

그것은 logcat 09-25 07 : 37 : 04.501 : E/AndroidRuntime (10194)의 오류를 보여줍니다 : java.lang.ClassCastException : java.lang.String을 android.database.Cursor로 형변환 할 수 없습니다 – neel

관련 문제