【问题标题】:how to display sqllite inserting data using recyclerview in android studio如何在android studio中使用recyclerview显示sqlite插入数据
【发布时间】:2019-12-09 18:04:10
【问题描述】:

我是安卓新手。 当我插入数据时,它可以正常工作。但是当我单击使用recyclerview显示插入数据的按钮时,它会显示以下错误消息:Sqlite Insert and View has stop.

错误信息如下:

  1. 在 com.example.sqliteinsertandview.MainActivity.ShowData(MainActivity.java:56) 在 java.lang.reflect.Method.invoke(本机方法) 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) 在 android.view.View.performClick(View.java:6256) 在 android.view.View$PerformClick.run(View.java:24701) 在 android.os.Handler.handleCallback(Handler.java:789) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

MainActivity 代码:

public class MainActivity extends AppCompatActivity {

    private EditText nameEt, ageEt;
    private Button insertBtn;
    String name, age;
    DatabaseHelper helper;

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

        init();
        insertData();


    }

    private void insertData() {
        insertBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                name = nameEt.getText().toString();
                age = ageEt.getText().toString();

                long id = helper.insertData(name, age);
                Toast.makeText(MainActivity.this, "Your id" + id, Toast.LENGTH_SHORT).show();

            }
        });

    }

    private void init() {

        nameEt = findViewById(R.id.nameEt);
        ageEt = findViewById(R.id.ageEt);
        insertBtn = findViewById(R.id.insertBtn);
        helper = new DatabaseHelper(this);

    }

    public void ShowData(View view) {
        startActivity(new Intent(this, ShowActivity.class));

    }
}

显示活动代码:

public class ShowActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    UserAdapter adapter;
    List<User> users;
    DatabaseHelper helper;

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

        init();

        getData();
    }

    private void getData(){

        Cursor cursor = helper.showData();
        while (cursor.moveToNext()){
            int id = cursor.getInt(cursor.getColumnIndex(helper.COL_ID));
            String name = cursor.getString(cursor.getColumnIndex(helper.COL_NAME));
            String age = cursor.getString(cursor.getColumnIndex(helper.COL_AGE));

            users.add(new User(id,name,age));
            adapter.notifyDataSetChanged();
        }

    }

    private void init(){

        recyclerView = findViewById(R.id.userRecyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        users = new ArrayList<>();
        helper = new DatabaseHelper(this);
        adapter = new UserAdapter(users);
        recyclerView.setAdapter(adapter);
    }

DatabaseHelper 代码:

public class DatabaseHelper extends SQLiteOpenHelper {

    private static String DATABASE_NAME = "User.db";
    private static String TABLE_NAME = "User";
    public static String COL_ID = "Id";
    public static String COL_NAME = "Name";
    public static String COL_AGE = "Age";
    private static  int VERSION = 1;
    private static String createTable = "create table "+TABLE_NAME+"(Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Age TEXT)";

    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(createTable);

    }

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

    }

    long insertData(String name, String age){
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_NAME,name);
        contentValues.put(COL_AGE,age);
        SQLiteDatabase sqLiteDatabase = getWritableDatabase();
        long id = sqLiteDatabase.insert(TABLE_NAME,null,contentValues);
        sqLiteDatabase.close();

        return id;

    }

    public Cursor showData(){
        String show_all = " select* From "+TABLE_NAME;
        SQLiteDatabase sqLiteDatabase = getReadableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery(show_all,null);
        return cursor;
    }
}

【问题讨论】:

  • 添加您的DatabaseHelper
  • 现在我在上面添加了DatabaseHelper。

标签: android sqlite android-recyclerview


【解决方案1】:

您没有在AndroidManifest.xml 文件中添加ShowActivity 类。在application标签内添加这个

<activity android:name=".ShowActivity"/>

【讨论】:

  • 现在有什么问题?一样吗?
  • 您应该添加完整的堆栈跟踪。从您发布的日志中不清楚
  • 谢谢兄弟的合作,我的问题解决了。
  • 出了什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2015-04-03
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多