2015-12-11 3 views
0

У меня есть API, который возвращает простой ответ JSON просто отлично (код ответа 200). Но когда я прошу тот же URL из моего андроид приложение, он получает 404.API возвращает 404 для дооснащения

Вот зависимости

compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' 
compile 'com.squareup.okhttp:okhttp:2.6.0' 
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' 
compile 'com.google.code.gson:gson:2.4' 

Это мой интерфейс

public interface ExampleApi { 
    @GET("/test/drink/") 
    Call<Example> getExample(); 
} 

Эти коды работают в MainActivity

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("https://localpro.herokuapp.com/api") 
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 

ExampleApi api = retrofit.create(ExampleApi.class); 
Call<Example> call = api.getExample(); 
call.enqueue(new Callback<Example>() { 
    @Override 
    public void onResponse(Response<Example> response, Retrofit retrofit) { 
     try { 
      Log.i("Response code", " " + response.code()); 
      Log.i("Response", " " + response.body().toString()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public void onFailure(Throwable t) { 
    } 
}); 

Вход

12-11 16:59:44.235 8885-8885/com.wealthpack.retrofitfinal I/Response code: 404 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at com.wealthpack.retrofitfinal.MainActivity$1.onResponse(MainActivity.java:45) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at android.os.Handler.handleCallback(Handler.java:746) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at android.os.Looper.loop(Looper.java:148) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5443) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
12-11 16:59:44.236 8885-8885/com.wealthpack.retrofitfinal W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

Примечание: Я совершенно не знаком с разработкой Android и использованием Java через несколько лет.

+0

Проверьте, если вы андроид устройство находится в той же сети вашего локального хост-сервера, проблема в том, что приложение не может найти этот URL-адрес и не получит 404. – diogojme

+0

API не на локальном хосте. Это в Интернете. @diogojme – Iqbal

+0

URL-адрес работает, и путь '/ test/drink /' выглядит правильно, и проблема заключается в том, что вы получаете '' java.lang.NullPointerException '' в 'response.body(). toString() 'вызвано нулевым телом, я тестировал в своем примере приложения, и он работает, 404 не найден о недопустимом URL-адресе или пути, убедитесь, что вы вызываете правильный URL-адрес. – diogojme

ответ

1

Это проблема синтаксиса,

вы должны написать службу, как это:

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("https://localpro.herokuapp.com/api/") 
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 

public interface ExampleApi { 
@GET("test/drink/") 
Call<Example> getExample(); 

для более подробной информации проверить эту хорошую презентацию от Jake Wharton https://youtu.be/KIAoQbAu3eA?t=32m24s :)

0

просить Ваше обслуживание

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     Response response = App.retrofit().buildRequest(TestActivity.this).universityService().getExample(); //getExample("json") 
     if(response.getStatus() == 200){ 
      System.out.println(response.getBody().toString()); 
     }else{ 
      System.out.println(response.getStatus()); 
     } 
    } 
}).start(); 

Чтобы получить свой сервис

@GET("/test/drink/") 
Response getExample(); 

или

@GET("/test/drink/") 
Response getExample(@Query("format") String format); 

Ваши модели

public class Example { 
    public boolean success; 
    public List<Drink> drinks; 
} 

public class Drink { 
    public String name; 
    public String description; 
} 

дооснащения адаптер, им с использованием 1.9.0 версии дооснащения

private static final String url = "http://localpro.herokuapp.com/api"; 

restAdapter = new RestAdapter.Builder() 
      .setEndpoint(url) 
      .build(); 

Это работает для меня.

+0

Я хотел получить ответ на версию: 2.0.0-beta2. – Iqbal

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