HarmonyOS 鸿蒙Next - 我该怎么优化官方的代码【AGC云数据库集成Android最新的新新新BUG】附核心源码

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next - 我该怎么优化官方的代码【AGC云数据库集成Android最新的新新新BUG】附核心源码

使用场景

–>APP用户匿名登录状态,对云数据库进行读写

首先匿名登录状态代码

private String useid;
//匿名登录源码
private void initSQL() {
AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(new OnSuccessListener<SignInResult>() {
@Override
public void onSuccess(SignInResult signInResult) {
// onSuccess
AGConnectUser user = signInResult.getUser();
useid=user.getUid();
Log.w(“TAG”, "gei id= " +useid);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// onFail
}
});
}

以上代码为前提,现在使用两种方法进行测试

第一种是废弃的老方法(官方废弃当然是存在BUG,但是运行稳定,可以读写数据库)

private AGConnectInstance instance;
private Task<CloudDBZone> openDBZoneTask;
private  CloudDBZone mCloudDBZone;
private AGConnectCloudDB mCloudDB;
private CloudDBZoneConfig mConfig;

先上全局成员

第一种方法如下

private void LoadSQL() {
AGConnectCloudDB.initialize(this);
mCloudDB = AGConnectCloudDB.getInstance();
try {
mCloudDB.createObjectType(ObjectTypeInfoHelper.getObjectTypeInfo());
} catch (AGConnectCloudDBException e) {
Log.e(“CloudDB”, "createObjectType Failed " + e.getMessage());
}
mConfig = new CloudDBZoneConfig(“QuickStartDemo”,
CloudDBZoneConfig.CloudDBZoneSyncProperty.CLOUDDBZONE_CLOUD_CACHE,
CloudDBZoneConfig.CloudDBZoneAccessProperty.CLOUDDBZONE_PUBLIC);
mConfig.setPersistenceEnabled(true);
try {
mCloudDBZone = mCloudDB.openCloudDBZone(mConfig, true);
} catch (AGConnectCloudDBException e) {
Log.e(“CloudDB”, "openCloudDBZone failed: " + e.getMessage());
}

}

第二种方式如下,是官方文档的异步文档,但是却无法正常读写数据

private void LoadSQL2(){
AGConnectCloudDB.initialize(this);
instance = AGConnectInstance.buildInstance(new AGConnectOptionsBuilder()
.setRoutePolicy(AGCRoutePolicy.CHINA).build(this));
mCloudDB = AGConnectCloudDB.getInstance(instance, AGConnectAuth.getInstance(instance));

try {
    mCloudDB.createObjectType(ObjectTypeInfoHelper.getObjectTypeInfo());
    mConfig = new CloudDBZoneConfig("QuickStartDemo",
            CloudDBZoneConfig.CloudDBZoneSyncProperty.CLOUDDBZONE_CLOUD_CACHE,
            CloudDBZoneConfig.CloudDBZoneAccessProperty.CLOUDDBZONE_PUBLIC);
    mConfig.setPersistenceEnabled(true);
    openDBZoneTask = mCloudDB.openCloudDBZone2(mConfig, true); 
    openDBZoneTask.addOnSuccessListener(new OnSuccessListener&lt;CloudDBZone&gt;() {
        @Override
        public void onSuccess(CloudDBZone cloudDBZone) {
            Log.i("TAG", "open cloudDBZone success");
            mCloudDBZone = cloudDBZone;//调用的时候根本无法赋值,哪怕代码写在这里已经无法写入新数据
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(Exception e) {
            Log.w("TAG", "open cloudDBZone failed for " + e.getMessage());
        }
    });
} catch (AGConnectCloudDBException e) {
    e.printStackTrace();
}

}

//第二种无法写入数据,官方的回复是登录认证失败,那么第二种方法并不适合匿名登录,需要怎么做,

比较第一种是官方遗弃的方法,却能正常使用,这是什么问题,我该怎么优化第二段的代码,谢谢

截图

image.png

这个最新的就很头疼了,不支持匿名登录用户啊

image.png

9 回复

官方文档需要优化,个人解决方案如下:但去掉参数,会有什么不一样,华为大神能否解释一下,已经如何看文档解决问题呢?

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

博客首页 > AppGallery Connect > APP接入云数据库官方源码需要优化

APP接入云数据库官方源码需要优化

原创132******90 昨天 18:12:18 1

Android集成云数据库有匿名登录,但是官方文档存在问题,导致匿名用户无法新增数据

mCloudDB = AGConnectCloudDB.getInstance(instance, AGConnectAuth.getInstance(instance));

官方文档应该修改为:

mCloudDB = AGConnectCloudDB.getInstance(instance,AGConnectAuth.getInstance());

我也是刚发现,这句代码果然好坑,坑了我昨天一下午,今天一下午

能解释一下,带参数后有啥不一样吗,农村人只会搬运,不懂原理

工单的回复是这样的

AGConnectAuth.getCurrentUser

并不是第二种方法不适合匿名登录,是您的匿名账号并未登陆成功,您可以通过AGConnectAuth.getCurrentUser方法判断当前认证服务是否登录。如果为null则未登录。

那么匿名登录代码是否有什么问题

真的很头大,没人跟我说怎么解决,最后还是自己一句一句去理解才能解决,什么梗,好寂寞
开发者您好 这个是因为认证登录的方式不匹配引起的,对于代码中的认证方式,如果是默认存储地,则mCloudDB的初始化方式应该是:

mCloudDB = AGConnectCloudDB.getInstance(AGConnectInstance.getInstance(), AGConnectAuth.getInstance());

如果需要指定存储地,则应该是:

AGConnectInstance instance= AGConnectInstance.buildInstance(new AGConnectOptionsBuilder().setRoutePolicy(AGCRoutePolicy.CHINA).build(this));

mCloudDB = AGConnectCloudDB.getInstance(instance, AGConnectAuth.getInstance());

这里的差异是因为认证SDK接口AGConnectAuth的getInstance和getInstance(<带参数>)获取到的认证实例不共通导致的

还是大佬厉害啊

可以在github提pull request 欢迎一起优化示例代码

https://github.com/AppGalleryConnect/agc-android-demos

现在解决了么?

针对您提出的HarmonyOS鸿蒙Next中AGC云数据库集成Android的问题及附带的核心源码,优化官方代码通常涉及多个层面,包括但不限于认证服务、数据库操作等。

首先,确保您的代码遵循最新的HarmonyOS开发指南和最佳实践。对于匿名登录问题,应检查AGConnectCloudDB.getInstance()方法的调用是否正确,确保传递了正确的认证实例。若官方文档中的异步方法无法正常读写数据,建议详细检查错误日志,确认是否由于登录认证失败导致。

此外,优化代码时,应考虑使用更高效的数据加载和缓存策略,减少数据库访问频次,提升应用性能。同时,确保您的开发环境(如DevEco Studio)和HarmonyOS SDK为最新版本,以获得最新的功能和性能优化。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部