【问题标题】:what's wrong with Doa in android ROOM in my app code cause to crash app?我的应用程序代码中的 android ROOM 中的 Doa 有什么问题导致应用程序崩溃?
【发布时间】:2021-02-17 22:15:51
【问题描述】:

我是 android 新手,想将 Room 用于我的数据库,但是在网络上进行了多次搜索后,我无法解决一个错误。

Goods.java

package ir.mhn.nhamrahtop.db;

import androidx.annotation.NonNull;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity (tableName = "goodstbl")
public class Goods {

    @PrimaryKey
    @NonNull
  public String goodsId;

}

GoodsDao.java

package ir.mhn.nhamrahtop.db;

import androidx.room.Dao;
import androidx.room.Insert;

@Dao
public interface GoodsDao {
    @Insert
   public   void insert(Goods goods);
}

TopDatabase.java

package ir.mhn.nhamrahtop.db;


import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {Goods.class}, version = 1)

public abstract class TopDatabase extends RoomDatabase {
    public abstract GoodsDao goodsDao();
}

MainActivity.java

package ir.mhn.nhamrahtop;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;
import ir.mhn.nhamrahtop.db.Goods;
import ir.mhn.nhamrahtop.db.GoodsDao;
import ir.mhn.nhamrahtop.db.TopDatabase;


public class MainActivity extends AppCompatActivity {

    public static TopDatabase database;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        database=Room.databaseBuilder(getApplicationContext(),TopDatabase.class,"dbgoods")
        .allowMainThreadQueries()
        .build();
         
        Goods goods1=new Goods();
        goods1.goodsId="123";
        GoodsDao goodsDao=database.goodsDao();
        goodsDao.insert(goods1);
    }

我在这里删除了一些不相关的代码块。 我的应用程序在加载 MainActivity 时崩溃,但仅删除“goodsDao.insert(goods1)”行后,一切都很好。 我的代码有什么问题!? (对不起,如果我的英语很差) 提前致谢

【问题讨论】:

  • 请发布实际的错误/崩溃消息。
  • 另一个值得注意的点是最好在后台线程而不是主 UI 线程上进行房间查询
  • @Greeshma 我知道也听过很多次,但无法简明扼要地理解它的原因!

标签: android android-room dao


【解决方案1】:

从此:

https://stackoverflow.com/a/64461346/15230839

我将 (onConflict = OnConflictStrategy.REPLACE) 添加到 @Insert ,问题就解决了。

【讨论】:

    猜你喜欢
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多