如何将数据从sqllite放入列表视图?

问题描述

我有一个应用程序,用户可以在其中输入三个输入项(名称数量和类型),我希望这些输入项进入数据库,然后当用户单击状态按钮时,他们可以查看以下内容中的所有用户输入项列表视图。在我的情况下,当我运行该应用程序时,这些项目将添加数据库中,但是当我单击以在清单状态活动中查看它们时,该应用程序退出。有人知道我哪里出了问题或我错过了什么吗?对于抱歉,这可能是一个愚蠢的新问题。

DatabaseHelperUser类:

public class DatabaseHelper extends sqliteOpenHelper {

public static final String DATABASE_NAME = "Inventory.db";
public static final String TABLE_NAME = "Inventory_table";
public static final String COL1 = "Name";
public static final String COL2 = "Quantity";
public static final String COL3 = "Type";


public  DatabaseHelper(Context context){
    super(context,DATABASE_NAME,null,1);
}


@Override
public void onCreate(sqliteDatabase db) {

    db.execsql("create table " + TABLE_NAME + " (Name TEXT,Quantity Text,Type Text)");

}

@Override
public void onUpgrade(sqliteDatabase db,int i,int i1) {

    db.execsql("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}
public boolean insertData(String Name,String Quantity,String Type){
    sqliteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL1,Name);
    contentValues.put(COL2,Quantity);
    contentValues.put(COL3,Type);
    long result = db.insert(TABLE_NAME,contentValues);

    if(result == -1)
        return false;
    else
        return true;

}
public Cursor getAllData(){
    sqliteDatabase db = this.getWritableDatabase();
    Cursor data = db.rawQuery("select * from " + TABLE_NAME,null);
    return data;
}
public String deletedata(){
    sqliteDatabase myDB = this.getWritableDatabase();
    myDB.delete(TABLE_NAME,null);
    myDB.close();

    return null;
}
}

AddItem类:

public class AddItem extends AppCompatActivity {

DatabaseHelper myDB;
EditText etName,etQuantity,etType;
Button btAdd2,btStatus2;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_item);

    myDB = new DatabaseHelper(this);

    final EditText etName = findViewById(R.id.editTextName);
    final EditText etQuantity = findViewById(R.id.editTextQuantity);
    final RadioButton rbBiscuit = findViewById(R.id.radioButtonBiscuit);
    final RadioButton rbCookie = findViewById(R.id.radioButtonCookie);
    final RadioButton rbCake = findViewById(R.id.radioButtonCake);
    final RadioButton rbIngredient = findViewById(R.id.radioButtonIngredient);
    final RadioButton rbOther = findViewById(R.id.radioButtonOther);
    Button btAdd2 = findViewById(R.id.buttonAdd2);
    final Button btStatus2 = findViewById(R.id.buttonStatus2);

    final EditText etType = findViewById(R.id.editTextType1);


    btAdd2.setonClickListener(new View.OnClickListener() {
        public void onClick(View view) {

            String edtName = etName.getText().toString();
            String edtQuantity = etQuantity.getText().toString();
            String edtType = etType.getText().toString();

            if (etName.length() !=0 || etQuantity.length() !=0 || etType.length() !=0){
                // myDB.insertData(edtName,edtQuantity,edtType);
                AddData(edtName,edtType);
                etName.setText("");
                etQuantity.setText("");
                etType.setText("");

            }
            else{
                Toast.makeText(AddItem.this,"Fill in all of the fields",Toast.LENGTH_SHORT).show();
            }


        }
        public void AddData(String edtName,String edtQuantity,String edtType){
            boolean insert = myDB.insertData(edtName,edtType);
            if(insert){
                Toast.makeText(AddItem.this,"Data Inserted",Toast.LENGTH_SHORT).show();
            }
            else{
                Toast.makeText(AddItem.this,"Error,Data not Inserted",Toast.LENGTH_SHORT).show();
            }
        }

    });

    btStatus2.setonClickListener(new View.OnClickListener() {
        public void onClick(View view) {
                Intent i = new Intent(AddItem.this,InventoryStatus.class);
                startActivity(i);


        }


    });

 }

}

InventoryStatus类:

public class InventoryStatus extends AppCompatActivity {
DatabaseHelper myDB;
ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_inventory_status);

    ListView listView = findViewById(R.id.listViewStock);
    myDB = new DatabaseHelper(this);

    populateListView();

}
public void populateListView(){
    Cursor data = myDB.getAllData();
    ArrayList<String> list = new ArrayList<>();
    while(data.movetoNext()){
        list.add(data.getString(1));
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1);
    listView.setAdapter(adapter);
}

}

解决方法

您忘记了将列表传递给适配器构造函数。

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,**list**);

并尝试在InventoryStatus.class中将类型转换为listview:

ListView listView = (ListView) findViewById(R.id.listViewStock);