java - 如何在android中更新realm

标签 java android realm

我有 RealmObject 类,其中状态列现在存在,我想更新该状态列值 尽管我查看了 Realm 官方博客,但我不知道如何执行此操作,但没有太大帮助。

public void storeDevice() {
    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    if (ActivityCompat.checkSelfPermission(Login.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
    }
    if (telephonyManager != null) {
        Log.e("imeino", telephonyManager.getDeviceId());
    }

    WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    WifiInfo wInfo = null;
    if (wifiManager != null) {
        wInfo = wifiManager.getConnectionInfo();
    }
    String macAddress = "02:00:00:00:00:00";
    try {
        if (wInfo != null) {
            macAddress = wInfo.getMacAddress();
        }
        Log.e("device_mac", macAddress);
    } catch (Exception e) {
    }

    mobile = edit_mobile.getText().toString().trim();
    imei_no = telephonyManager.getDeviceId();
    brand = Build.MANUFACTURER;
    device_model = Build.MODEL;
    mac = macAddress;
    device_version = Build.VERSION.RELEASE;

    realm = Realm.getDefaultInstance();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            DeviceModel deviceModel = realm.createObject(DeviceModel.class);
            RealmResults<DeviceModel> deviceModels =    realm.where(DeviceModel.class).equalTo("imei_no", imei_no).findAll();
            deviceModels.deleteAllFromRealm();

            deviceModel.setMobile(mobile);
            deviceModel.setImei_no(imei_no);
            deviceModel.setStatus("1");
            deviceModel.setBg_device_brand(brand);
            deviceModel.setDevice_mac(mac);
            deviceModel.setBg_device_model(device_model);

        }
    });
}

这里我想更新 if block 内 OnResponse 方法中的值

private void storeCustomerData(Map<String, String> map, HashMap<String, Integer> map1) {

            Call<JsonElement> call = apiInterface.customerData(map, map1);
            call.enqueue(new Callback<JsonElement>() {
                @Override
                public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
                    JsonElement jsonElement = response.body();
                    Log.i("jsonElement", "data");
                    JsonObject jsonObject = jsonElement.getAsJsonObject();
                    String status = jsonObject.getAsJsonPrimitive("Status").toString();
                    Log.i("status", status);
                    if (status.equals("1")) {
                        realm.executeTransaction(new Realm.Transaction() {
                            @Override
                            public void execute(Realm realm) {
                                RealmResults<DeviceModel> results = realm.where(DeviceModel.class).equalTo("mobile", realm_mobile).findAll();
                                results.setValue("status", "5");
                                deviceModel.getStatus();
                                Log.i("status",deviceModel.getStatus());
                            }
                        });

                        Toast.makeText(RequiredData.this, "Your Data Has Been Succesfully Added", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(RequiredData.this, MainActivity.class);
                        startActivity(intent);

                    } else {
                        Toast.makeText(RequiredData.this, "Sorry, Unsucess to Save Data", Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onFailure(Call<JsonElement> call, Throwable t) {

                }
            });
        }

最佳答案

您可以查看official documentation并搜索“insertOrUpdate”。您必须定义主键才能使用 insertOrUpdate。在您的情况下,主键将为“imei_no”。

例如,这是我的 UserInfo 对象类。

public class UserInfo extends RealmObject {

@PrimaryKey
private String userId;
private String userAge;
private String userSex;

public UserInfo() {

}

public void setUserId(String userId) {
    this.userId = userId;
}

public String getUserId() {
    return userId;
}


public String getUserAge() {
    return userAge;
}

public void setUserAge(String userAge) {
    this.userAge = userAge;
}

public String getUserSex() {
    return userSex;
}

public void setUserSex(String userSex) {
    this.userSex = userSex;
}

}

并插入或更新 UserInfo 对象,如下所示:

mRealm = Realm.getDefaultInstance();

if (!mRealm.isInTransaction()) {
   mRealm.beginTransaction();
}

UserInfo userInfo = new UserInfo();
userInfo.setUserId("135455");
userInfo.setUserAge("22");
userInfo.setUserSex("male");

mRealm.insertOrUpdate(userInfo);
mRealm.commitTransaction();

关于java - 如何在android中更新realm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237037/

相关文章:

android - 要以编程方式在 android 中打开 chrome 浏览器的设置页面?

android - 为什么有些 HTTPS 请求无法在 Fiddler 上解密,而有些可以?

android - 在 HTML5 中,如何让 Android 设备的屏幕保持打开状态?

ios - 我应该如何支持使用 DynamoDB 和 iOS 的离线模式?

sqlite - 在带有 Redux 的 React Native 应用程序中使用 Realm

java - 如何使用 mockito 捕获特定类型的列表

java - 搜索重定向的网站路径

java - 对 "sorted"数组进行排序

java.sql.SQLException : Access denied for user 'root' @'localhost' (using password: NO) 异常

java - 没有这样的方法依赖异常