다음 위치에있는 자습서를 따르려고합니다. https://cloud.google.com/developers/articles/how-to-build-mobile-app-with-app-engine-backend-tutorialAndroid 앱 엔진 백엔드 업로드
나는 또한 내 필요에 따라 수정하고 있습니다. 튜토리얼 프로젝트를 따라 할 수 있었지만 백엔드에서 자체 엔티티 클래스를 사용해 보았을 때 약간의 오류가 발생했습니다. 예를 들어;
내가 만든 엔티티 클래스는 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();
자습서에서 설명한대로 로컬 디버그 서버에서이 작업을 시도하지 않습니다. 클라우드에서 작동하는 방식을보고 싶었 기 때문에 백엔드 프로젝트를 일식을 통해 배포했습니다. 내 관리자 페이지에 내 앱이 실행 중이라고 나와 있습니다. 또한 LOCAL_ANDROID_RUN을 false로 설정하여 로컬 디버그 서버를 사용하지 않도록합니다. 튜토리얼에서 수행 한대로 onCreate 메소드에서 new EndpointsTask().execute();
이라고 부르지 않아도 될까요? 과거의 질문 중 일부는 이와 같은 것을 제안 할 수도 있지만 그 이유를 알 수 없습니다.
도움 주셔서 감사합니다.