2015-09-02 13 views
80

RESTful api'ye erişmek için Retrofit kullanıyorum.Retrofit 2, ana URL'den ana karakter adından sonra karakteri kaldırır

http://api.example.com/service

Bu arayüzde kodudur: Baz url

public interface ExampleService { 
    @Headers("Accept: Application/JSON") 
    @POST("/album/featured-albums") 
    Call<List<Album>> listFeaturedAlbums(); 
} 

ve ben isteği göndermek ve yanıtının nasıl alacağınızı şudur:

new AsyncTask<Void, Void, Response<List<Album>>>() { 

     @Override 
     protected Response<List<Album>> doInBackground(Void... params) { 
      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl("http://api.example.com/service") 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 

      ExampleService service = retrofit.create(ExampleService.class); 

      try { 
       return service.listFeaturedAlbums().execute(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Response<List<Album>> listCall) { 
      Log.v("Example", listCall.raw().toString()); 
     } 
    }.execute(); 

Aldığım günlük tuhaf bir şey:

V/Örnek: Tepki {protokol = http://api.example.com/album/featured-albums http/1.1, kod = 404, mesaj Bulunamadı =, url =} burada

Neler oluyor?

+0

Sorunu çözebilir misiniz? aynı konuyla da karşı karşıya olduğum için. ve her zaman doğru cevabı denedikten sonra her zaman onfailure –

cevap

187

Güçlendirme 2 bir <a href=""> olur aynı kurallara kullanır.

senin göreli URL üzerinde / lider o ana bilgisayardaki mutlak bir yol olduğunu güçlendirme söyler. İşte bu gösteriyor verdi bir sunumdan bir örnek:

enter image description here

Not dibinde çözüldü Yanlış URL. lider / kaldırarak

URL sonra göreceli hale gelir ve temel URL parçası olan yol bölümleri ile birleştirecek. sunumda düzeltildi son URL artık doğru şudur: örnekte

enter image description here

Eğer temel URL üzerinde sondaki / yok. Muhtemelen bir tane daha eklemek istersiniz, böylece göreceli yollar, onun bir kardeşi olmaktan ziyade, onun üstünde çözülür.

+6

olsun Bu yeni tür URL çözünürlüğünün neden daha yararlı olduğunu anlamıyorum. Buradan alabileceğiniz tek şey gizli hatalardır (bu soruya işaret edilenler gibi) ve karşı sezgisel sonuçlar ('http: // api.ornek.com/hizmet' +'/albüm/özellikli albümler 'http: // api.example.com/albüm/özellikli albümler '). Ve bu sessiz hata, hiçbir şeyden kaynaklanır; ancak, temel URL'nin sonuna veya API URL'sinin önüne yerleştirdiğinizde. Bu kesmenin faydalı olduğu herhangi bir kullanım durumu var mı? – EpicPandaForce

+1

[Burada sunum video var] (https://youtu.be/KIAoQbAu3eA?t=32m19s) –

+11

Bu sunum izledikten sonra bana mantıklı, ama web sitesine bir küçük not eklemek için çok iyi olurdu . Neyin yanlış gittiğini öğrenmek birkaç dakika sürdü. ? –