2016-04-07 2 views
0

Я просто закончил приложение для Android, основанное на учебнике по веб-сайту. Это приложение предназначено для отправки и получения данных в хранилище google. Я создал вспомогательный сервер appengine. Это хорошо работает локально на localhost: 8888. Я мог видеть преобразование данных. Но после того, как я развернул его в Google App Engine. Он не может отображать данные. Я мог получить доступ к хранилищу данных по адресу myapp.appspot.com/_ah/api/explorer. Но я не могу получить доступ к нему с телефоном, пока я могу получить доступ к локальным данным с помощью эмулятора телефона. Я только что последовал за этим джентльменом https://github.com/sachinkariyattin/CloudendpointsКонечная точка Google для облаков в приложении Google для приложений

Любой может мне помочь? Заранее спасибо.

Внизу классу CloudEndpointUtils

package com.iot1; 

import com.google.api.client.googleapis.json.GoogleJsonError; 
import com.google.api.client.googleapis.json.GoogleJsonResponseException; 
import com.google.api.client.googleapis.services.AbstractGoogleClient; 
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; 
import com.google.api.client.googleapis.services.GoogleClientRequestInitializer; 

import android.app.Activity; 
import android.util.Log; 
import android.widget.Toast; 

import java.io.IOException; 

/** 
* Common utilities for working with Cloud Endpoints. 
* 
* If you'd like to test using a locally-running version of your App Engine 
* backend (i.e. running on the Development App Server), you need to set 
* LOCAL_ANDROID_RUN to 'true'. 
* 
* See the documentation at 
* http://developers.google.com/eclipse/docs/cloud_endpoints for more 
* information. 
*/ 
public class CloudEndpointUtils { 

    /* 
    * TODO: Need to change this to 'true' if you're running your backend locally using 
    * the DevAppServer. See 
    * http://developers.google.com/eclipse/docs/cloud_endpoints for more 
    * information. 
    */ 
    protected static final boolean LOCAL_ANDROID_RUN = true; 

    /* 
    * The root URL of where your DevAppServer is running (if you're running the 
    * DevAppServer locally). 
    */ 
    protected static final String LOCAL_APP_ENGINE_SERVER_URL = "http://localhost:8888/"; 

    /* 
    * The root URL of where your DevAppServer is running when it's being 
    * accessed via the Android emulator (if you're running the DevAppServer 
    * locally). In this case, you're running behind Android's virtual router. 
    * See 
    * http://developer.android.com/tools/devices/emulator.html#networkaddresses 
    * for more information. 
    */ 
    protected static final String LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID = "http://10.0.2.2:8888"; 

    /** 
    * Updates the Google client builder to connect the appropriate server based 
    * on whether LOCAL_ANDROID_RUN is true or false. 
    * 
    * @param builder 
    *   Google client builder 
    * @return same Google client builder 
    */ 
    public static <B extends AbstractGoogleClient.Builder> B updateBuilder(
     B builder) { 
    if (LOCAL_ANDROID_RUN) { 
     builder.setRootUrl(LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID 
      + "/_ah/api/"); 
    } 

    // only enable GZip when connecting to remote server 
    final boolean enableGZip = builder.getRootUrl().startsWith("https:"); 

    builder.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() { 
    @Override 
     public void initialize(AbstractGoogleClientRequest<?> request) 
      throws IOException { 
     if (!enableGZip) { 
      request.setDisableGZipContent(true); 
     } 
     } 
    }); 

    return builder; 
    } 

    /** 
    * Logs the given message and shows an error alert dialog with it. 
    * 
    * @param activity 
    *   activity 
    * @param tag 
    *   log tag to use 
    * @param message 
    *   message to log and show or {@code null} for none 
    */ 
    public static void logAndShow(Activity activity, String tag, String message) { 
    Log.e(tag, message); 
    showError(activity, message); 
    } 

    /** 
    * Logs the given throwable and shows an error alert dialog with its 
    * message. 
    * 
    * @param activity 
    *   activity 
    * @param tag 
    *   log tag to use 
    * @param t 
    *   throwable to log and show 
    */ 
    public static void logAndShow(Activity activity, String tag, Throwable t) { 
    Log.e(tag, "Error", t); 
    String message = t.getMessage(); 
    // Exceptions that occur in your Cloud Endpoint implementation classes 
    // are wrapped as GoogleJsonResponseExceptions 
    if (t instanceof GoogleJsonResponseException) { 
     GoogleJsonError details = ((GoogleJsonResponseException) t) 
      .getDetails(); 
     if (details != null) { 
     message = details.getMessage(); 
     } 
    } 
    showError(activity, message); 
    } 

    /** 
    * Shows an error alert dialog with the given message. 
    * 
    * @param activity 
    *   activity 
    * @param message 
    *   message to show or {@code null} for none 
    */ 
    public static void showError(final Activity activity, String message) { 
    final String errorMessage = message == null ? "Error" : "[Error ] " 
     + message; 
    activity.runOnUiThread(new Runnable() { 
    @Override 
     public void run() { 
     Toast.makeText(activity, errorMessage, Toast.LENGTH_LONG) 
      .show(); 
     } 
    }); 
    } 
} 

ответ

0

Я обнаружил, что после изменения appengine-web.xml я должен обновить созданную клиентскую библиотеку Google. И все это работает сейчас.

0

Я думаю, вы не создать свой собственный счет в Google Cloud и/или внести необходимые изменения в AppEngine-web.xml файл. Ниже приводится подробный пример: http://rominirani.com/2014/08/20/gradle-tutorial-part-7-android-studio-app-engine-gradle/

+0

Спасибо. У меня есть проект, созданный в Google Cloud. Я изменил appengine-web.xml. И это работает, когда я использую myapp.appspot.com/_ah/api/explorer. Единственная ошибка: я не могу получить доступ к хранилищу Google Cloud по телефону. –

+0

Вы изменили идентификаторы client_id (WEB_CLIENT_ID и ANDROID_CLIENT_ID) в вашем API конечных точек? – ozo

+0

Как изменить WEB_CLIENT_ID и ANDROID_CLIENT_ID? –

Смежные вопросы