Android 移动后端启动器可以';t将自定义id写入数据存储

Android 移动后端启动器可以';t将自定义id写入数据存储,android,google-app-engine,google-cloud-endpoints,google-cloud-datastore,Android,Google App Engine,Google Cloud Endpoints,Google Cloud Datastore,我正在使用谷歌移动后端启动器。我正在尝试使用.setId在CloudEntity对象中写入自定义ID,但是当我尝试使用CloudBackend.insert方法将其写入数据存储时。它只写属性,但不包括我的自定义ID protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); m

我正在使用谷歌移动后端启动器。我正在尝试使用.setId在CloudEntity对象中写入自定义ID,但是当我尝试使用CloudBackend.insert方法将其写入数据存储时。它只写属性,但不包括我的自定义ID

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    mTrackButton = (Button) findViewById(R.id.trackButton);
    mTrackButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
        sendData();

        }
    });
}
private void sendData(){

    CloudEntity ce = new CloudEntity("Try");
    ce.setId("Custom_ID");
    ce.put("Key1", "Value1");

    CloudCallbackHandler<CloudEntity> cch = new CloudCallbackHandler<CloudEntity>() {

        @Override
        public void onComplete(CloudEntity results) {
            Toast.makeText(TestActivity.this, "Sent to cloud", Toast.LENGTH_SHORT).show();

        }
        @Override
        public void onError(IOException e) {
            Toast.makeText(TestActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
        }
    };

    getCloudBackend().insert(ce,cch);
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_测试);
mTrackButton=(按钮)findViewById(R.id.trackButton);
mTrackButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
sendData();
}
});
}
私有void sendData(){
CloudEntity ce=新的CloudEntity(“Try”);
ce.setId(“自定义ID”);
ce.put(“键1”、“值1”);
CloudCallbackHandler cch=新的CloudCallbackHandler(){
@凌驾
未完成的公共void(CloudEntity结果){
Toast.makeText(TestActivity.this,“发送到云”,Toast.LENGTH_SHORT.show();
}
@凌驾
公共无效申报人(IOE例外){
Toast.makeText(TestActivity.this,例如toString(),Toast.LENGTH_SHORT).show();
}
};
getCloudBackend().insert(ce,cch);
}


我做错了什么吗?

虽然我没有使用移动后端启动器,但我已经广泛使用了数据存储

当您存储实体时,数据存储将自动为其分配唯一键

我推荐以下关于密钥的文档:

在这里,您将看到建议使用自动的唯一键,并将您自己的值设置为单独的属性

如果您决定在实际密钥上设置自己的ID,官方建议使用字符串,因为数字可能与自动生成的ID冲突。另一种方法是保留一系列要使用的数字ID


但所有这些都需要在后端编写更多的自定义代码,并使交互更加复杂。

+1,我也有同样的问题。我通过使用自定义参数“CustomId”并使用查询来选择实体而不是.get()来解决这个问题。不过,这只是一个快速解决方案,并不能真正解决您的问题。