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