2011-11-27 99 views
1

我需要你的幫助來修復我的代碼。Android - 強制關閉,如果我點擊ListView上的項目

我的意圖是,如果我點擊ListView上的項目,它會帶我到intent action_view。

問題是我得到強制關閉,如果我點擊ListView上的項目。

我認爲問題出在onItemClick方法上,你可以給出更好的方法來完成它。

這裏是我的代碼:

public class HotelList extends ListActivity{ 
hotelHelper dbHotelHelper; 
protected Cursor cursor; 
protected ListAdapter adapter; 
ListView numberList;  

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

    numberList = (ListView)findViewById(android.R.id.list); 
    numberList.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 
      // TODO Auto-generated method stub 
        String selectedItem = (String) getListAdapter().getItem(position); 
        String query = "SELECT lat, long FROM hoteltbl WHERE name = '" + selectedItem + "'"; 
        SQLiteDatabase dbs = dbHotelHelper.getReadableDatabase(); 
        Cursor result = dbs.rawQuery(query, null); 
        result.moveToFirst(); 

        double lat = result.getDouble(result.getColumnIndex("lat")); 
        double longi = result.getDouble(result.getColumnIndex("long")); 

        Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&saddr=&daddr="+lat+","+longi)); 
        startActivity(intent); 

       }     
      });  


    dbHotelHelper = new hotelHelper(this); 
    try{ 
     dbHotelHelper.createDataBase();   
    } 
    catch (Exception ioe){ 
     Log.e("err","Unable to create database"); 
    }   
    view(); 


    } 



private void view() { 
    // TODO Auto-generated method stub 
    SQLiteDatabase db = dbHotelHelper.getReadableDatabase(); 
    try{ 
     cursor = db.rawQuery("SELECT * FROM hoteltbl", null); 
     adapter = new SimpleCursorAdapter(
       this, 
       android.R.layout.simple_list_item_1, 
       cursor, 
       new String[]{"name"}, 
       new int[] {android.R.id.text1} 
       ); 
     numberList.setAdapter(adapter);  
    } 
    catch (Exception e){ 
     Log.e("error",e.toString()); 
    }  
} 

}

+3

請發佈您的logcat異常詳細信息。 – zmbq

回答

0

內部項目點擊 你有很多方面,它可能會導致異常, 異常會導致您的應用程序強制關閉 你的代碼是不是有例外處理

我列舉了可能導致異常的原因,請檢查以下內容

String selectedItem = (String) getListAdapter().getItem(position); 

在這裏,你可能會得到交談類型的問題,要轉換的東西不被支持的字符串

SQLiteDatabase dbs = dbHotelHelper.getReadableDatabase(); 
Cursor result = dbs.rawQuery(query, null); 
result.moveToFirst(); 
double lat = result.getDouble(result.getColumnIndex("lat")); 
double longi = result.getDouble(result.getColumnIndex("long")); 
  1. 如果dbHotelHelper.getReadableDatabase返回null或dbHotelHelper空,在這種情況下,您的應用程序將強制關閉
  2. 如果dbs.rawQuery返回null,你的應用程序將強制關閉
  3. 如果結果爲空,那麼你可能調用moveToFirst,getDouble和getColumnIndex空對象,在這種情況下您的應用程序將強制關閉

您的信息 SimpleCursorAdapter構造函數API級別被廢棄11 此選項氣餒,因爲它會導致應用程序的UI線程上執行光標查詢,從而可能會導致反應不佳,甚至應用程序無響應錯誤。作爲替代,使用帶有CursorLoader的LoaderManager。