2011-11-28 76 views
0

我想在我的ListView中使用OnItemClickListener时从数据库中获取项目,但我不知道如何执行该操作的语法。在Android中使用OnItemClickListener从SQLite数据库获取项目

另一方面,我必须实现onListItemClick方法,我尝试使用,但我强制关闭,也许我的语法只是错误的。

你可以给代码建议如何做到这一点。因为这个,我感到沮丧。我真的很感谢那些回答这个问题的人。

这里是我的代码,请给意向onItemClick mehod:

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 arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 

      String query = "SELECT lat, long FROM hoteltbl WHERE name = '" + selectedItem[THIS IS THE PROBLEM: the syntax to get selected item] + "'"; 
      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, 
       R.layout.hotelview, 
       cursor, 
       new String[]{"name"}, 
       new int[] {R.id.hotelname} 
       ); 
     numberList.setAdapter(adapter);  
    } 
    catch (Exception e){ 
     Log.e("error",e.toString()); 
    }  
} 

}

这里的logcat的:

11-28 20:44:10.449: ERROR/AndroidRuntime(856): FATAL EXCEPTION: main 
11-28 20:44:10.449: ERROR/AndroidRuntime(856): java.lang.NullPointerException 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at com.william.placefinder.HotelList$1.onItemClick(HotelList.java:40) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at android.widget.ListView.performItemClick(ListView.java:3382) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at android.os.Handler.handleCallback(Handler.java:587) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at android.os.Looper.loop(Looper.java:123) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-28 20:44:10.449: ERROR/AndroidRuntime(856):  at dalvik.system.NativeStart.main(Native Method) 
+0

可以请你发布你的logcat trace吗? – deepa

+0

我认为它必须在此语法中编辑:String query =“SELECT lat,long FROM hoteltbl WHERE name ='”+ ** selectedItem [这是问题:获取选定项目的语法] ** +“'”; – forgiven24

+0

上面的语法位于onItemClick方法,任何想法如何使“selectedItem”变量从数据库中获取数据? – forgiven24

回答

1

我希望你只加载酒店名称到您的ListView 。 我认为你应该首先从你的listview中获得你的酒店名称(希望你正确地获得了listview)。在您的onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)中,首先添加。

String selectedItem = (String) numberList.getItemAtPosition(arg2); 

然后将它传递给您的选择查询。

+0

好友thx为您的答案,它启发我。我不使用你给出的代码,但我使用'long selectedItem = numberList.getItemIdAtPosition(arg2);'它工作。 – forgiven24

相关问题