2016-11-14 2 views
1

Я хочу создать запрос xml-rpc для создания файла и передать 2 параметра «имя_приложения» & «ключ» и изменить тип контента на «application/x-www-form-urlencoded ", как мой код ниже.
Android: как создать сообщение xml-rpc с настраиваемым заголовком HTTP и типом контента

try { 
     XMLRPCClient oneTimeKeyClient = new XMLRPCClient(new URL(URL_REQUEST_SAMPLE), XMLRPCClient.FLAGS_DEFAULT_TYPE_STRING); 
     oneTimeKeyClient.setCustomHttpHeader("X-HTTP-METHOD-OVERRIDE", "POST"); 

// oneTimeKeyClient.setCustomHttpHeader ("Content-Type", "применение/х-WWW-форм-urlencoded");

 HashMap<String, String> oneTimeKeyParam = new HashMap<>(); 
     oneTimeKeyParam.put("application_name", "hello_app"); 
     oneTimeKeyParam.put("key", "bb5eb953d3b41dcf59f4669d98f8e14782ed83133be772956b"); 
     Vector<Object> params = new Vector<Object>(); 
     params.add(oneTimeKeyParam); 

     oneTimeKeyClient.callAsync(new XMLRPCCallback() { 
      @Override 
      public void onResponse(long id, Object response) { 
       try { 
        result = ((Map) response).get(NAME_ONE_TIME_KEY).toString(); 
       } catch (Exception e) { 
        Timber.e("onParseError %s", e.getMessage()); 
        DialogUtil.showLoginErrorDialog(getSupportFragmentManager()); 
       } 
      } 

      @Override 
      public void onError(long id, XMLRPCException error) { 
       Timber.e("onError %s", error.getMessage()); 
       DialogUtil.showLoginErrorDialog(getSupportFragmentManager()); 
      } 

      @Override 
      public void onServerError(long id, XMLRPCServerException error) { 
       Timber.e("onServerError %s", error.getMessage()); 
       DialogUtil.showLoginErrorDialog(getSupportFragmentManager()); 
      } 
     }, "", params); 
    } catch (Exception e) { 
     Timber.e("onError %s", e.getMessage()); 
     DialogUtil.showLoginErrorDialog(getSupportFragmentManager()); 
    } 

У меня ошибка «onServerError APPLICATION_NAME должна записываться не существует».
I использование aXMLRPC библиотека https://github.com/gturri/aXMLRPC.
В какую библиотеку вы рекомендуете?
Могу ли я использовать дооснащение, чтобы выполнить запрос xml-rpc?
Спасибо за любую помощь

ответ

2

Вы просто использовать переоснащения, как это:

@FormUrlEncoded 
@POST("onetime_key") 
Observable<OneTimeKeyRes> requestOneTimeKey(@Field("application_name") String applicationName, @Field("key") String key); 

Вы должны добавить SimpleXmlConverter:

Retrofit retrofit = new Retrofit.Builder() 
      .client(builder.build()) 
      .baseUrl(YOUR_BASE_URL) 
      .addConverterFactory(SimpleXmlConverterFactory.create()) 
      .build();