2014-07-21 2 views
1

다음 위치에있는 자습서를 따르려고합니다. 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();이라고 부르지 않아도 될까요? 과거의 질문 중 일부는 이와 같은 것을 제안 할 수도 있지만 그 이유를 알 수 없습니다.

도움 주셔서 감사합니다.

답변

0

나는 이것을 얻었습니다. 이것은 실제로 매우 간단합니다. 이 오류가 발생하면 백엔드 연결에 문제가 있다는 의미입니다. 대부분의 경우 백엔드를 생성하는 동안 프로젝트에 대한 전체 정보를 제공하지 않았기 때문입니다. 입력했는지 확인하십시오. 당신의

-API 키 페이지의 자격 증명

- 프로젝트 수

- 프로젝트 이름

제대로

- 프로젝트 버전을 전망이다. 당신이 운이 없다는 것을 다른 사람에게 알리십시오. 또는 원래 게시 한 자습서를 따라 로컬 서버에서 작업 할 수도 있습니다. 두 경우 모두 자습서에 지정된 섹션을 주석 처리해야합니다. 나는 이유를 모르지만 그렇지 않으면 작동하지 않습니다.

또한 Datastore API에서 지원하지 않는 데이터 유형을 저장하려고 시도했을 수 있습니다. 그 표정을 위해; 1메가바이트보다 큰의 Blob을 저장

com.google.appengine.api.datastore.DataTypeUtils은

도 허용되지 않습니다. 이것들은 내가이 문제에 관해 찾을 수있는 모든 것들이다.백엔드와의 올바른 연관성을 확인하고 위의 규칙을 만족하는지 확인하십시오.

관련 문제