来自DB的Android中的多彩色列表



我一直在试图让它工作大约2个小时,我只是知道我很愚蠢,但是我无法让我的多列列表正常工作。首先,它知道数据库中有两个行,但是由于某些原因,第一行和第二行是完全相同的,其次,上下文菜单也无法正常工作,一旦我单击"视图",就会崩溃该应用程序它。

inventory_list.java

private void populateListView() {
    ListView ListView=(ListView)findViewById(R.id.listView1);
    list=new ArrayList<HashMap<String,String>>();

    db = new SQLiteHandler(getApplicationContext());
    list = db.getSomeInvDetails();
    ListViewAdapters adapter=new ListViewAdapters(this, list);
    ListView.setAdapter(adapter);
    registerForContextMenu(ListView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Select The Action");
    menu.add(0, v.getId(), 0, "View");
    menu.add(0, v.getId(), 0, "Delete");
}
@Override
public boolean onContextItemSelected(MenuItem item){
    AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
    if(item.getTitle()=="View"){
        Intent i = new Intent(Inventory_List.this, Inventory_View.class);
        i.putExtra("id", list.get(info.position));
        startActivity(i);
    }
   else{
        return false;
    }
    return true;
}
@Override
public void onResume() {
    super.onResume();
    populateListView();
}

sqlitehandler.java

public ArrayList<HashMap<String, String>> getSomeInvDetails() {
    ArrayList<HashMap<String, String>> list=new ArrayList<HashMap<String,String>>();
    HashMap<String, String> user = new HashMap<String, String>();
    String selectQuery = "SELECT  * FROM " + TABLE_INV;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    if (cursor.moveToFirst()) {
        do {
        user.put("title", cursor.getString(1));
            user.put("stock", cursor.getString(5));
            list.add(user);
    }while(cursor.moveToNext());}
    cursor.close();
    db.close();
    // return user
    Log.d(TAG, "Fetching user from Sqlite: " + user.toString());
    return list;
}

ListViewSadapter

public class ListViewAdapters extends BaseAdapter{
public ArrayList<HashMap<String, String>> list;
Activity activity;
TextView txtFirst;
TextView txtSecond;
public ListViewAdapters(Activity activity,ArrayList<HashMap<String, String>> list){
    super();
    this.activity=activity;
    this.list=list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    LayoutInflater inflater=activity.getLayoutInflater();
    if(convertView == null){
        convertView=inflater.inflate(R.layout.colum_row, null);
        txtFirst=(TextView) convertView.findViewById(R.id.title);
        txtSecond=(TextView) convertView.findViewById(R.id.stock);
    }
    HashMap<String, String> map=list.get(position);
    txtFirst.setText(map.get(FIRST_COLUMN));
    txtSecond.setText(map.get(SECOND_COLUMN));
    return convertView;
}

stacktrace错误

03-10 08:12:38.665 13660-13660/com.example.mypc.inventory W/Bundle: Key id expected String but value was a java.util.HashMap.  The default value <null> was returned.
03-10 08:12:38.666 13660-13660/com.example.mypc.inventory W/Bundle: Attempt to cast generated internal exception:
                                                                    java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String
                                                                        at android.os.BaseBundle.getString(BaseBundle.java:995)
                                                                        at android.content.Intent.getStringExtra(Intent.java:6243)
                                                                        at com.example.mypc.inventory.Inventory_View.onCreate(Inventory_View.java:59)
                                                                        at android.app.Activity.performCreate(Activity.java:6679)
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                        at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:154)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
03-10 08:12:38.671 13660-13660/com.example.mypc.inventory D/SQLiteHandler: Fetching user from Sqlite: {}
03-10 08:12:38.675 13660-13660/com.example.mypc.inventory D/AndroidRuntime: Shutting down VM
03-10 08:12:38.676 13660-13660/com.example.mypc.inventory E/AndroidRuntime: FATAL EXCEPTION: main
                                                                            Process: com.example.mypc.inventory, PID: 13660
                                                                            java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mypc.inventory/com.example.mypc.inventory.Inventory_View}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                                at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                at android.os.Looper.loop(Looper.java:154)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                             Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                                                                                at com.example.mypc.inventory.Inventory_View.onCreate(Inventory_View.java:61)
                                                                                at android.app.Activity.performCreate(Activity.java:6679)
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                                                at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:154) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

您需要在循环时通过DO创建新用户。

使用上下文菜单时崩溃的堆栈跟踪是什么?

if(item.getTitle()=="View"){
       ...
}

这个块总是转到else,您应该使用euqals

if(item.getTitle().equals("View")){
       ...
}

最新更新