2015-01-02 5 views
1

Я настраивал конечные точки с помощью учебных пособий Google, и я хотел создать свой собственный класс помимо автоматически генерируемого MyBean, но когда я пытаюсь получить к нему доступ, я получаю ошибку 503. Мне сложно найти информацию об использовании конечных точек в студии Android, поэтому любая помощь будет оценена по достоинству. Вот мой код в MyEndpoints, и я просто хочу упомянуть, что вызов автоматической сгенерированной функции sayHi по-прежнему отлично работает. Единственное, когда я использую свою функцию.Пользовательские объекты конечных точек Google

package com.example.joebruckner.fitnesstracker.backend; 

import com.google.api.server.spi.config.Api; 
import com.google.api.server.spi.config.ApiMethod; 
import com.google.api.server.spi.config.ApiNamespace; 

import java.util.Date; 

import javax.inject.Named; 

/** 
* An endpoint class we are exposing 
*/ 
@Api(name = "myApi", version = "v1", namespace = @ApiNamespace(
     ownerDomain = "backend.fitnesstracker.joebruckner.example.com", 
     ownerName = "backend.fitnesstracker.joebruckner.example.com", 
     packagePath = "")) 

public class MyEndpoint { 

    /** 
    * A simple endpoint method that takes a name and says Hi back 
    */ 
    @ApiMethod(name = "sayHi") 
    public MyBean sayHi(@Named("name") String name) { 
     MyBean response = new MyBean(); 
     response.setData("Hi, " + name); 

     return response; 
    } 

    /** 
    * A test to see how my own objects work 
    */ 
    @ApiMethod(name = "getWorkout") 
    public WorkoutFob getWorkout(@Named("test") String test) { 
     WorkoutFob workout = new WorkoutFob(1, 2, new Date()); 
     return workout; 
    } 

} 

01-02 17:28:21.939 4802-4802/joebruckner.fitnesstracker I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:49832335 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ com.google.api.client.googleapis.json.GoogleJsonResponseException: 503 Service Unavailable 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ { 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ "code": 503, 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ "errors": [ 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ { 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ "domain": "global", 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ "message": "", 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ "reason": "backendError" 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ } 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ ], 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ "message": "" 
01-02 17:28:23.232 4802-4827/joebruckner.fitnesstracker W/System.err﹕ } 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at joebruckner.fitnesstracker.EndpointsAsyncTask.doInBackground(EndpointsAsyncTask.java:34) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at joebruckner.fitnesstracker.EndpointsAsyncTask.doInBackground(EndpointsAsyncTask.java:17) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
01-02 17:28:23.233 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
01-02 17:28:23.234 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
01-02 17:28:23.234 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
01-02 17:28:23.234 4802-4827/joebruckner.fitnesstracker W/System.err﹕ at java.lang.Thread.run(Thread.java:818) 
01-02 17:28:23.418 4802-4828/joebruckner.fitnesstracker V/RenderScript﹕ Application requested CPU execution 
01-02 17:28:23.423 4802-4828/joebruckner.fitnesstracker V/RenderScript﹕ 0xa130b200 Launching thread(s), CPUs 4 

package joebruckner.fitnesstracker; 

import android.content.Context; 
import android.os.AsyncTask; 
import android.support.v4.util.Pair; 
import android.widget.Toast; 

import com.example.joebruckner.fitnesstracker.backend.myApi.MyApi; 
import com.google.api.client.extensions.android.http.AndroidHttp; 
import com.google.api.client.extensions.android.json.AndroidJsonFactory; 

import java.io.IOException; 

/** 
* Created by joebruckner on 12/31/14. 
*/ 
public class EndpointsAsyncTask extends AsyncTask<Pair<Context, String>, Void, String> { 
    private static MyApi myApi = null; 
    private final String PROJECT_CODE = "---------"; 
    private Context context; 

    @Override 
    protected String doInBackground(Pair<Context, String>... params) { 
     if (myApi == null) { 
      MyApi.Builder b = new MyApi.Builder(AndroidHttp.newCompatibleTransport(), 
        new AndroidJsonFactory(), null) 
        .setRootUrl("https://" + PROJECT_CODE + ".appspot.com/_ah/api/"); 
      myApi = b.build(); 
     } 

     context = params[0].first; 
     String name = params[0].second; 

     try { 
      return myApi.getWorkout("Test 1").execute().toString(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return e.getMessage(); 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(context, result, Toast.LENGTH_LONG).show(); 
    } 
} 

ответ

0

Убедитесь, что вы первый запуск бэкенд, выбрав облачный бэкенд на вершине, если вы используете Android Studio. Если это так, нам нужно также увидеть ваш класс WorkoutFob, а также способ его использования.

Обновите свой код AsyncThread, чтобы мы могли помочь определить ошибку.

EDIT: Я вижу проблему, я верю. В блоке try catch вы возвращаете e.getMessage() вместо null, как вы должны в onPostExecute. Вместо этого верните нуль, а не e.getMessage(). Тост, скорее всего, вызывает проблему, так как он пытается поджарить нулевой элемент. Добавьте оператор if внутри onPostExecute, чтобы проверить, является ли результат нулевым или нет из doInBackground. Предоставьте два разных тоста, если результат равен нулю или нет, и Log.e («Ошибка:», e.getMessage) в doInBackground. Дайте мне знать, если это принесет пользу.

Кроме того, вы можете сделать переменную контекста общедоступной и статической и создать свою AsyncTask в качестве объекта для добавления значения контекста вместо того, чтобы передавать пар в AsyncTask. Немного легче читать и использовать

+0

Да, не проблема, если я вернусь на свой компьютер, добавьте асинхронный код. Что касается запуска бэкэнд, я все еще должен запускать его в AS, если я его развернул? – Joe

+0

Вам нужно запустить бэкэнд в AS, и вы можете проверить, успешно ли он выполняется через выход Android Terminal, который вы видите при запуске бэкэнд. Кроме того, проверьте http: // localhost: 8080 после запуска, чтобы убедиться, что он запущен. В этот момент вы можете запустить свою клиентскую программу, чтобы проверить ее и посмотреть, работает ли она. Ваш код асинхронного потока должен включать в себя блок try и catch для создания и запуска бэкэнд-объектов. –

+0

Я добавляю свой асинхронный код. Я попробовал это с бэкэндом, работающим в AS, и получаю те же результаты. – Joe

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