2013-11-14 31 views
40

私はRetrofitとRobospiceを使用して、AndroidアプリケーションでAPI呼び出しを行っています。すべての@POSTメソッドはうまくいくので、@GETコマンドをURLにパラメータなしで実行しますが、最後に@GETコールを取得してパラメータを処理することはできません!例えばRetrofit:@GETコマンドの複数のクエリパラメータ?

私のAPIのパスは、 "私の/ API /コール/" だったと私は2つのパラメータ "のparam1" とURLの "PARAM2" を望んでいた場合は、get呼び出しは次のようになります。

http://www.example.com/my/api/call?param1=value1&param2=value2

は、私はセットアップを持っているので、のように私の@GETインタフェース:

@GET("/my/api/call?param1={p1}&param2={p2}") 
Response getMyThing(@Path("p1") 
String param1, @Path("p2") 
String param2); 

が、私は
を言って、エラーを取得するには、「例外が要求ネットワークの実行中に発生しました:URLクエリ文字列」/my/api/call?param1={p1}&param2={p2}を「メソッドgetMyThingにreplaを持っていないかもしれませんcedブロック。

私は間違っていますか?あなたはこの構文を使用する必要があり

答えて

98

@GET("/my/API/call") 
Response getMyThing(
    @Query("param1") String param1, 
    @Query("param2") String param2); 

をURLにクエリパラメータを指定するだけで、あなたがキーと値の両方を知っているときのためのものであり、それらが固定されています。

+2

になります:11-14 10:29:48.626:E // RequestRunner.java:134(31776):10:29: 48630 Thread-11782リクエストネットワーク実行中に例外が発生しました:null 私のspicemanagerでインターフェイスを設定していますが、何がnullになるのかわかりません。 – AndroidNoob

+2

わかりません。私はRoboSpiceを一度も使用していません。私はちょうど改造のためにここにいます:) –

+0

こんにちはジェイク、それはあなたが自分でクエリのパラメータを構築しなければならないシナリオでは完璧でしょう、しかし、彼らがあなたにpreviosly与えられたらどうなりますか?情報を取得する場所を教えてくれるテンプレートレスポンスを想像し、それらのパラメータを設定してください。 So/my/api/call?param1 = {p1}&param2 = {p2}は手動では作成されませんが、別の呼び出しの応答で提供されます。 –

5

クエリパラメータをGET-URLに記述しないでください。

@GET("/my/api/call") 
Response getMyThing(@Query("param1") 
String param1, @Query("param2") 
String param2); 
11

あなたがGETのparamsの束を持っている場合は、あなたのURLにそれらを渡すための別の方法は、HashMapのである。このようにそれを実行してください。

class YourActivity extends Activity { 

    private static final String BASEPATH = "http://www.example.com"; 

    private interface API { 
     @GET("/thing") 
     void getMyThing(@QueryMap Map<String, String>, new Callback<String> callback); 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_layout); 

     RestAdapter rest = new RestAdapter.Builder().setEndpoint(BASEPATH).build(); 
     API service  = rest.create(API.class); 

     Map<String, String> params = new HashMap<String, String>(); 
     params.put("foo", "bar"); 
     params.put("baz", "qux"); 
     // ... as much as you need. 

     service.getMyThing(params, new Callback<String>() { 
      // ... do some stuff here. 
     }); 
    } 
} 

と呼ばれるURLは、私は今、次のエラーを取得していますhttp://www.example.com/thing/?foo=bar&baz=qux

関連する問題