Я настраивал конечные точки с помощью учебных пособий 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();
}
}
Да, не проблема, если я вернусь на свой компьютер, добавьте асинхронный код. Что касается запуска бэкэнд, я все еще должен запускать его в AS, если я его развернул? – Joe
Вам нужно запустить бэкэнд в AS, и вы можете проверить, успешно ли он выполняется через выход Android Terminal, который вы видите при запуске бэкэнд. Кроме того, проверьте http: // localhost: 8080 после запуска, чтобы убедиться, что он запущен. В этот момент вы можете запустить свою клиентскую программу, чтобы проверить ее и посмотреть, работает ли она. Ваш код асинхронного потока должен включать в себя блок try и catch для создания и запуска бэкэнд-объектов. –
Я добавляю свой асинхронный код. Я попробовал это с бэкэндом, работающим в AS, и получаю те же результаты. – Joe