2015-09-13 1 views
4

Я хотел получить строку json из версии 2, но мне не нужен объект. пожалуйста, помогите получить строку, когда call response.body() из метода onResponse.get String Из опционной версии 2.0.0 beta1

public void getLoginResultFromWebservice(int customerID, String user, String pass) { 
    String action = "Login"; 
    long timeMillis = System.currentTimeMillis(); 
    String key = new String(Hex.encodeHex(DigestUtils.md5(G.HASH_KEY + timeMillis))); 
    String customerId = String.valueOf(customerID); 
    String username = user; 
    String password = pass; 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(G.URL_Webservice_Base) 
      .client(U.getClient()) 
      .build(); 
    Webservice webservice = retrofit.create(Webservice.class); 
    Call<String> call = webservice.getLoginResult(action,key,customerId,username,password); 
    call.enqueue(new Callback<String>() { 
     @Override 
     public void onResponse(Response<String> response) { 
      U.log(" ActivityLogin : OnResponse "); 
      U.log(" ActivityLogin : Result " + response.body().toString()); 
     } 

     @Override 
     public void onFailure(Throwable t) { 
      U.log("ActivityLogin On Failure"); 
     } 
    }); 
} 

EDIT: я нашел решение:

new Retrofit.Builder() 
    .baseUrl(G.URL_Webservice_Base) 
    // add a converter for String 
    .addConverter(String.class, new ToStringConverter()) // add this 
    //.addConverterFactory(GsonConverterFactory.create()) // remove this line 
    .build() 
    .create(Webservice.class); 

ToStringConverter.class

public final class ToStringConverter implements Converter<String> { 

@Override 
public String fromBody(ResponseBody body) throws IOException { 
    return body.string(); 
} 

@Override 
public RequestBody toBody(String value) { 
    return RequestBody.create(MediaType.parse("text/plain"), value); 
} 
} 
+0

Это не работает! – KinGPinG

ответ

0

вы можете попробовать

public ApiService getBase64StrService() { 
    if (retrofit == null) { 
     retrofit = new Retrofit 
       .Builder() 
       .baseUrl(endpoint) 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .addConverter(String.class, new Base64StringConverter()) 
       .build(); 
    } 
    if (service == null) { 
     service = retrofit.create(ApiService.class); 
    } 

    return service; 
} 



static class Base64StringConverter implements Converter { 

    @Override 
    public Object fromBody(ResponseBody body) throws IOException { 
     InputStream reader = null; 
     try { 
      reader = body.byteStream(); 
      ByteArrayOutputStream writer = new ByteArrayOutputStream(); 
      byte[] buffer = new byte[1024 * 8]; 
      int size = -1; 
      while ((size = reader.read(buffer)) > 0) { 
       writer.write(buffer, 0, size); 
      } 
      String result = new String(writer.toByteArray()); 
      return result; 
     } finally { 
      try { 
       if (reader != null) 
        reader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

    @Override 
    public RequestBody toBody(Object value) { 
     return null; 
    } 
} 
+0

Это не работает! – KinGPinG

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