2016-08-31 4 views
0

多くのページを調査しましたが、何も答えられませんでした。 はここWCFサービスに改造して投稿する方法

@FormUrlEncoded 
@POST("/Service1.svc/GetData1") 
void GetData1(@Field("title") List<String> m, Callback<String> cb); 

これは私がデータをポストする方法であるアンドロイド

RaceAPI.javaに私のコードです

RestAdapter adapter = new RestAdapter.Builder() 
      .setEndpoint("http://10.0.1.12:54253/") 
      .build(); 
    final RaceAPI race= adapter.create(RaceAPI.class); 
    race.PostData(Arrays.asList("foo", "bar"), new Callback<String>() { 
     @Override 
     public void success(String s, Response response) { 

     } 

     @Override 
     public void failure(RetrofitError error) { 
      int a; 
      a=1; 
     } 
    }); 

これは私のWCFサービスの署名である

  [OperationContract] 
      [WebInvoke(Method = "POST", 
      ResponseFormat = WebMessageFormat.Json, 
      RequestFormat = WebMessageFormat.Json, 
      BodyStyle = WebMessageBodyStyle.Wrapped, 
      UriTemplate = "/PostData")] 
      String PostData(List<String> m); 

が、私はこのエラーを受け取りました。レトロフィットのコールバックに失敗しました()

retrofit.RetrofitError: 400 Bad Request

ご協力いただけると助かります。

答えて

0

実際に、私はそれを改造インタフェースのいくつかの変更で動作させました。

interfaceのメソッド宣言にHeaders属性を追加しました。

@Headers("Content-Type:application/json") 
@POST("/Service1.svc/PostData") 
void PostData(@Body SpeechModel m, Callback<SpeechModel> cb); 

私はデータがインタフェースの本体とバインドを渡すことにしました。(私は@FormUrlEncodedを削除)

私は、サーバーから送信して取得するために、カスタムクラスを作りました。私は文字列または文字列配列として送信できませんでした(somewaysがあるかもしれません。それを見つけることができませんでした。)

SpeechModel m = new SpeechModel(); 
     m.setSpeechId(5); 
     m.setSpeechText("something"); 
     race.PostData(m, new Callback<SpeechModel>() { 
      @Override 
      public void success(SpeechModel PostDataResult, Response response) { 

      } 

      @Override 
      public void failure(RetrofitError error) { 
       int a; 
       a=1; 
      } 
     }); 

WCFサービスの署名、引数の型を変更し、型を返します。

[OperationContract] 
    [WebInvoke(Method = "POST",    
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle= WebMessageBodyStyle.Wrapped, 
    UriTemplate = "/PostData")] 
    SpeechModel PostData(SpeechModel m); 
関連する問題