2012-02-20 42 views
0

我有問題...錯誤傳遞到另一個活動列表視圖未捕獲的處理程序後:螺紋主力退出,由於未捕獲的異常

02-20 02:57:09.854: E/AndroidRuntime(12431): Uncaught handler: thread main exiting due to uncaught exception" 

...後...

02-20 02:57:09.864: E/AndroidRuntime(12431): java.lang.ClassCastException: java.util.ArrayList 

。 ..在一個ListView填充SQLite,listView工作正常,但後來當我嘗試使用onListItemClick,以獲取列表視圖選擇的項目的參數,並在其他佈局中顯示它,程序停止和DDMS說這個「未捕獲的處理程序:由於未捕獲的異常導致主線程退出」稍後說「java.lang.ClassCastExcept離子:java.util.ArrayList「在一個ListView」也許我處理壞的Arraylist我的適配器?

這是我的主類:

public class lay_main extends ListActivity 
    { 
    public ListView list; 
public DBHelper myAdap; 
protected SQLiteDatabase db; 
public Cursor cursor; 
DBHelper Context; 
DBHelper ArrayList; 

//adapter cAdapter class 
protected ListAdapter adapter; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lay_main); 

    collectXML(); 
    setupDataBase(); 
    setupAdapter(); 

}  
private void collectXML() 
{ 
    list = (ListView)findViewById(android.R.id.list); 

} 

public void setupDataBase() { 
    myAdap = new DBHelper(getApplicationContext()); 
    myAdap.insertCourses();    
} 

public void setupAdapter() 
{ 
if(myAdap.getCourses()!=null) 
    { 
    cAdapter adapter = new cAdapter(this, R.layout.list_courses, myAdap.getCourses()); 
    list.setAdapter(adapter); 
    } 
} 
public void onListItemClick(ListView parent, View view, int position, long id) 
{ 
     super.onListItemClick(parent, view, position, id); 
     Intent intent = new Intent(this, CourseDetails.class); 
     Cursor cursor = (Cursor) myAdap.getItem(position); 
     intent.putExtra("COURSE_ID", cursor.getInt(cursor.getColumnIndex("title"))); 
     startActivity(intent); 
} 
} 

我班CourseDetails用於接收和顯示數據:

public class CourseDetails<BDHelper> extends Activity { 
protected TextView tTitle; 
protected TextView tInstructor; 
protected TextView tLength; 
protected TextView tRating; 
protected TextView tTopic; 
protected TextView tSubject; 
protected TextView tDescription; 

protected int courseId;  
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.course_details); 

    courseId = getIntent().getIntExtra("COURSE_ID", 0); 
    SQLiteDatabase db = (new DBHelper(this)).getWritableDatabase(); 
    Cursor cursor = db.rawQuery("SELECT title, instructor, length, rating, topic, subject, description FROM courses",   
      new String[]{"" + courseId}); 


    if (cursor.getCount() == 1) 
    { 
      cursor.moveToFirst(); 

      tTitle = (TextView) findViewById(R.id.tTitle); 
      tTitle.setText(cursor.getString(cursor.getColumnIndex("title"))); 

      tInstructor = (TextView) findViewById(R.id.tInstructor); 
      tInstructor.setText(cursor.getString(cursor.getColumnIndex("instructor"))); 

      tLength = (TextView) findViewById(R.id.tLength); 
      tLength.setText(cursor.getString(cursor.getColumnIndex("length"))); 

      tRating = (TextView) findViewById(R.id.tRating); 
      tRating.setText(cursor.getString(cursor.getColumnIndex("rating"))); 

      tTopic = (TextView) findViewById(R.id.tTopic); 
      tTopic.setText(cursor.getString(cursor.getColumnIndex("topic"))); 

      tSubject = (TextView) findViewById(R.id.tSubject); 
      tSubject.setText(cursor.getString(cursor.getColumnIndex("subject"))); 

      tDescription = (TextView) findViewById(R.id.tDescription); 
      tDescription.setText(cursor.getString(cursor.getColumnIndex("description"))); 

    } 


}} 

我的適配器類:

public class cAdapter extends ArrayAdapter { 
Context context; 
ArrayList<Courses> courses; 

@SuppressWarnings("unchecked") 
public cAdapter(Context context, int layout_id, ArrayList<Courses> Courses) { 

    super(context, layout_id, Courses); 
    this.context=context; 
    this.courses=Courses; 


} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row = inflater.inflate(R.layout.list_courses, null); 
    try{ 
     //components 
     TextView txt_title=(TextView)row.findViewById(R.id.txt_title); 
     TextView txt_instructor=(TextView)row.findViewById(R.id.txt_instructor); 
     TextView txt_length=(TextView)row.findViewById(R.id.txt_length); 
     TextView txt_rating=(TextView)row.findViewById(R.id.txt_rating); 
     TextView txt_topic=(TextView)row.findViewById(R.id.txt_topic); 

     //asign values 
     txt_title.setText(courses.get(position).title); 
     txt_instructor.setText(courses.get(position).instructor); 
     txt_length.setText(courses.get(position).length); 
     txt_rating.setText(courses.get(position).rating); 
     txt_topic.setText(courses.get(position).topic); 

    }catch(Exception ex){}  
    return row; 
} 
} 

不是我做錯了,真的很感激你的幫助。

+0

粘貼getItem方法代碼。 – jeet 2012-02-20 07:04:37

+0

嗨jitendra,感謝您的閱讀,我的課CourseDetails接收並顯示類lay_main的數據。 – JLouis 2012-02-20 07:10:57

回答

1

適配器覆蓋的getItem方法和報酬的getItem Cources對象,

Override 
public Courses getItem(int position) 
{ 
    return courses.get(positon); 
} 

和SetupAdapter方法:

public void setupAdapter() 
{ 
if(myAdap.getCourses()!=null) 
    { 
    adapter = new cAdapter(this, R.layout.list_courses, myAdap.getCourses()); 
    list.setAdapter(adapter); 
    } 
} 

和itemClick在變化如下:

public void onListItemClick(ListView parent, View view, int position, long id) 
{ 
     super.onListItemClick(parent, view, position, id); 
     Intent intent = new Intent(this, CourseDetails.class); 
     Courses course= (Courses) adapter.getItem(position); 
     intent.putExtra("COURSE_ID", course.title)); 
     startActivity(intent); 
} 
+0

非常感謝Jitendra,這給我的錯誤:無法從ArrayList 投到課程,爲什麼? – JLouis 2012-02-20 07:41:22

+0

你是否被overrided getItem方法 – jeet 2012-02-20 07:49:13

+0

看到編輯答案 – jeet 2012-02-20 08:00:23

相關問題