【问题标题】:SQLITE DATABASE error in displaying data to listview向列表视图显示数据时出现 SQLITE DATABASE 错误
【发布时间】:2017-05-25 06:08:53
【问题描述】:

我在从 sqlite db 显示我的数据时遇到问题 我的应用程序在运行时停止工作并且不显示任何错误。 请帮帮我

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "ExpDatee.db";
    public static final String TABLE_NAME = "EXPDATE_TABLE";
    public static final String COL_1 = "PRO_ID";
    public static final String COL_2 = "PRO_NAME";
    public static final String COL_3 = "PRO_EXPDATE";
    public static final String COL_4 = "PRO_DAYTILLEXP";

    /**
     private static final String SQL_CREATE_TABLE_EXPDATE = "CREATE TABLE " + TABLE_NAME + "("
     + PRO_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
     + PRO_NAME + " TEXT NOT NULL, "
     + PRO_EXPDATE+ " TEXT NOT NULL, "
     + PRO_DAYTILLEXP + " TEXT NOT NULL, "
     + ");";
     **/

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
        // SQLiteDatabase db = this.getWritableDatabase();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE " + TABLE_NAME + "(PRO_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "PRO_NAME TEXT, " +
                "PRO_EXPDATE TEXT," +
                " PRO_DAYTILLEXP TEXT )");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }


    //method to insert data
    public boolean insertData(String PRO_NAME, String PRO_EXPDATE, String PRO_DAYTILLEXP)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_2,PRO_NAME);
        contentValues.put(COL_3,PRO_EXPDATE);
        contentValues.put(COL_4,PRO_DAYTILLEXP);

        Log.d(TAG, "ADD DATA : ADDING " + PRO_NAME + " TO " + TABLE_NAME);
        Log.d(TAG, "ADD DATA : ADDING " + PRO_EXPDATE + " TO " + TABLE_NAME);
        Log.d(TAG, "ADD DATA : ADDING " + PRO_DAYTILLEXP + " TO " + TABLE_NAME);

        long result = db.insert(TABLE_NAME,null ,contentValues );
        if (result == -1)
            return false;
        else
            return true;
    }


    //get all data
    public Cursor getData()
    {
        SQLiteDatabase db = this.getWritableDatabase();

        String query = "SELECT * FROM" + TABLE_NAME;
        Cursor data = db.rawQuery(query, null);
        return data;


    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    DatabaseHelper myDB;
    EditText etProductName, etDaysBeforeExp, etExpDate;
    Button btnAddItem, btnViewItem;

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

        myDB = new DatabaseHelper(this);
        etProductName = (EditText)findViewById(R.id.etProductName);
        etDaysBeforeExp = (EditText)findViewById(R.id.etDaysBeforeExp);
        etExpDate = (EditText)findViewById(R.id.etExpDate);
        btnAddItem  = (Button)findViewById(R.id.btnAddItem);
        btnViewItem  = (Button)findViewById(R.id.btnViewItem);

        btnAddItem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String PRO_NAME = etProductName.getText().toString();
                String PRO_EXPDATE = etExpDate.getText().toString();
                String PRO_DAYTILLEXP = etDaysBeforeExp.getText().toString();
                if(etProductName.length() !=0)
                {
                    AddData(PRO_NAME,PRO_EXPDATE,PRO_DAYTILLEXP);
                    etProductName.setText("");
                    etExpDate.setText("");
                    etDaysBeforeExp.setText("");
                }
                else
                {
                    toastMessage("PLEASE INSERT VALUE");
                }
            }
        });


        btnViewItem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ListDataActivity.class);
                startActivity(intent);
            }
        });
    }

    public void AddData(String PRO_NAME, String PRO_EXPDATE, String PRO_DAYTILLEXP)
    {
        boolean InsertData = myDB.insertData(PRO_NAME,PRO_EXPDATE,PRO_DAYTILLEXP);
        if(InsertData)
        {
            toastMessage("DATA INSERTED");
        }
        else
        {
            toastMessage("DATA NOT INSERTED");
        }

    }

    private void toastMessage(String message) {
        Toast.makeText(this,message, Toast.LENGTH_LONG).show();
    }

}

ListDataActivity.java

public class ListDataActivity extends AppCompatActivity {

    DatabaseHelper myDB;
    private ListView mListView;

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

        populateListView();
    }

    private void populateListView() {

        Cursor data = myDB.getData();
        ArrayList<String> listData = new ArrayList<>();
        while (data.moveToNext())
        {
            listData.add(data.getString(1));
            listData.add(data.getString(2));
            listData.add(data.getString(3));

        }
        ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listData);
        mListView.setAdapter(adapter);
    }


    private void toastMessage(String message) {
        Toast.makeText(this,message, Toast.LENGTH_LONG).show();
    }
}

【问题讨论】:

  • 在您的ListDataActivity 类中,myDB 永远不会被初始化。
  • populateListView 方法中使用SimpleCursorAdapter,而不是ArrayAdapter

标签: java android sqlite android-studio android-sqlite


【解决方案1】:

初始化列表数据活动

 myDB = new DatabaseHelper(this);

使用阵列适配器

ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listData);
mListView.setAdapter(adapter);

【讨论】:

  • 不,不要使用ArrayAdapter,当您的数据基于Cursor 时使用CursorAdapter(例如SimpleCursorAdapter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多