代码之家  ›  专栏  ›  技术社区  ›  sayres

房间-插入行时出错

  •  0
  • sayres  · 技术社区  · 7 年前

    以下是我使用Room Persistence Library将数据插入数据库的方式:

    @Entity(tableName = "users")
    public class ExpParent implements Parent<ExpChild>, Serializable {
    @Ignore
    private List<ExpChild> mChildrenList;
    
    @Embedded
    @SerializedName("UserInfo")
    private ExpChild childrenList;
    
    private String UserName;
    private String CreationDateTime;
    @PrimaryKey(autoGenerate = false)
    @NonNull
    private String Id ="";
    private String Topic;
    //......
    

    数据访问对象:

    @Dao
    public interface UserDao {
    
    @Query("SELECT * FROM users")
    List<ExpParent> getAllUsers();
    
    @Insert(onConflict = IGNORE)
    Long[] insertAllUsers(List<ExpParent> expParents);
    }
    

    但当我想在数据库中显示插入对象的数量时,我得到了这个错误:

     FATAL EXCEPTION: main
                                                 Process: com.example.sayres.a2_expandrecyandretrofit, PID: 2830
                                                 android.content.res.Resources$NotFoundException: String resource ID #0x8
                                                     at android.content.res.Resources.getText(Resources.java:312)
                                                     at android.widget.Toast.makeText(Toast.java:286)
                                                     at com.example.sayres.a2_expandrecyandretrofit.MainActivity$2$1$1.run(MainActivity.java:72)
                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                     at android.os.Looper.loop(Looper.java:148)
                                                     at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    

    这是我将对象插入db的方法:

               public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
                ServerResponse body = response.body();
                final List<ExpParent> users = body.getUsers();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        final Long[] longs = db.userDao().insertAllUsers(users);
    
                        MainActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, longs.length, Toast.LENGTH_SHORT).show();
                            }
                        });
    
                    }
                }).start();
    

    我通过改造,从我的服务中获取数据作为一个列表,然后将这些数据插入到工作线程中,我已经将这些数据插入了我的数据库。最后,我想展示如何将数字行插入到数据库中。但我有错误!!!

    1 回复  |  直到 7 年前
        1
  •  4
  •   Vladyslav Matviienko    7 年前

    你误用了 Toast.makeText() .
    第二个参数可以是 int R.string.some_string ),或 String .
    您试图传递一个整数( longs.length ),它不是资源ID。要显示整数,必须先将其转换为字符串。

    为此,您可以向其中添加一个空字符串:

    Toast.makeText(MainActivity.this, longs.length + "", Toast.LENGTH_SHORT).show();