Я пытаюсь подключиться к конечной точке Google в приложении Android, но когда я запускаю приложение на эмуляторе или на реальном устройстве, оба не работают, и я получаю ошибку 404, не найденную.
поэтому я создаю кнопку, которая реализует асинхронную связь:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void tellJoke(View view) {
EndpointsAsyncTask asyncTask = new EndpointsAsyncTask(this);
asyncTask.execute();
}
}
и это класс asynctask:
public class EndpointsAsyncTask extends AsyncTask<Void, Void, String> {
private static MyApi myApiService = null;
private Context mContext;
public EndpointsAsyncTask (Context context){
mContext = context;
}
@Override
protected String doInBackground(Void... params) {
if(myApiService == null) { // Only do this once
MyApi.Builder builder = new
MyApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), null)
// options for running against local devappserver
// 10.0.2.2 is localhost's IP address in Android emulator
// turn off compression when running against local devappserver
.setRootUrl("http://10.0.2.2:8080/_ah/api/")
.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
@Override public void initialize(AbstractGoogleClientRequest<?>
abstractGoogleClientRequest) throws IOException {
abstractGoogleClientRequest.setDisableGZipContent(true);
}
});
// end options for devappserver
myApiService = builder.build();
}
try {
return myApiService.jokes().execute().getData();
} catch (IOException e) {
return e.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
Intent intent = new Intent(mContext, AndroidLibraryActivity.class);
intent.putExtra("jokes", result);
mContext.startActivity(intent);
}
}
и в библиотеке Android я получил такой результат:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android_library);
TextView jokes;
jokes = findViewById(R.id.jokes);
Intent intent = getIntent();
String joke = intent.getStringExtra("jokes");
jokes.setText(joke);
}
и это моя конечная точка:
@Api(
name = "myApi",
version = "v1",
namespace = @ApiNamespace(
ownerDomain = "backend.builditbigger.gradle.udacity.com",
ownerName = "backend.builditbigger.gradle.udacity.com",
packagePath = ""
)
)
public class MyEndpoint {
/** A simple endpoint method that takes a name and says Hi back */
@ApiMethod(name = "jokes")
public MyBean jokes(){
MyBean response = new MyBean();
Joker jokes = new Joker();
String jokesResult = jokes.getJoke();
response.setData(jokesResult);
return response;
}
также я прочитал много решений, но у меня ничего не работает, и, кстати, когда я запускаю его на реальном устройстве, я меняю rooturl на эту ссылку:
http://builditbigger -id.appspot.com / _ah / апи /
но это не работает, так как заставить его работать хотя бы на симуляторе!