我正在尝试按照给出的教程; https://cloud.google.com/developers/articles/how-to-build-mobile-app-with-app-engine-backend-tutorial
我也在修改它以满足我的需求。我设法按照教程项目但是当我在后端尝试自己的实体类时,我遇到了一些错误。例如;
这是我创建的名为User的实体类;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private String name;
private String imageType;
private Blob image;
public Key getKey() {
return key;
}
public String getName() {
return this.name;
}
public String getImageType() {
return imageType;
}
public byte[] getImage() {
if (image == null) {
return null;
}
return image.getBytes();
}
public void setName(String name) {
this.name = name;
}
public void setImageType(String imageType) {
this.imageType = imageType;
}
public void setImage(byte[] bytes) {
this.image = new Blob(bytes);
}
}
然后我定义了一个AsyncTask,正如教程中所解释的那样。我想拍照,在设备中捕捉其路径并将该照片上传到Datastore。这是我的doInBaackground方法;
@Override
protected Void doInBackground(Void... params) {
User user = new User();
user.setName("Burak Çopur");
Userendpoint.Builder builder = new Userendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),
null);
builder = CloudEndpointUtils.updateBuilder(builder);
Userendpoint endpoint = builder.build();
try {
endpoint.insertUser(user).execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
最后,我在相机活动返回之后调用此方法,如下所示;
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
// Handle activity resulting from IMAGE_CAPTURE
if(requestCode == REQUEST_IMAGE_CAPTURE){
new UserTask().execute(getApplicationContext());
File myFile = new File(mCurrentPhotoPath);
if(myFile.exists())
myFile.delete();
}
}
我检查了一些类似的问题,但我找不到解决方案。我想先看看名字字段存储。然后我可以继续前进。这是我得到的错误代码的一部分;
07-22 02:21:28.941: W/System.err(4852):
com.google.api.client.googleapis.json.GoogleJsonResponseException:
503 Service Unavailable
这是有问题的代码行;
endpoint.insertUser(user).execute();
我不是在本地调试服务器中尝试这样做,因为它在教程中有解释。我想看看它在云上是如何工作的,所以通过eclipse部署了我的后端项目。我的管理页面显示我的应用正在运行我还将LOCAL_ANDROID_RUN设置为false,以便它不会尝试使用本地调试服务器。可能问题是我没有在onCreate方法中调用new EndpointsTask().execute();
,因为它在教程中完成了吗?过去的一些问题可能暗示了这样的事情,但我看不出原因。
感谢您的帮助。
答案 0 :(得分:0)
我想我得到了这个。这实际上非常简单。如果您收到此错误,则表示您的后端连接存在问题。大多数情况下,这是因为您在生成后端时未提供有关项目的完整信息。确保您已输入;
来自项目页面的证书的-API密钥
- 项目编号
- 项目名称
- 项目版本
正确。另外,你运气不好。或者您也可以按照原始帖子中给出的教程在本地服务器上工作。在任何一种情况下,请务必注释掉教程中指定的部分。我不知道为什么,但不起作用。
此外,您可能正在尝试存储Datastore API不支持的数据类型。对于那个看;
com.google.appengine.api.datastore.DataTypeUtils
也不允许存储大于1MB的Blob。这些都是我能找到的关于这个问题的部分。确保你的后端有一个有效的连接,并确保你满足上述规则。