如何从改造2获得字符串响应?

2022-08-31 16:17:49

我正在做Android,正在寻找一种方法来做一个超级基本的http GET / POST请求。我不断收到错误:

java.lang.IllegalArgumentException: Unable to create converter for class java.lang.String

网络服务:

public interface WebService {
    @GET("/projects")
    Call<String> jquery();
}

然后在我的java中:

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://jquery.org")
       // .addConverterFactory(GsonConverterFactory.create())
        .build();

    WebService service = retrofit.create(WebService.class);
    Call<String> signin = service.jquery();

    Toast.makeText(this, signin.toString(), Toast.LENGTH_LONG).show();

从字面上看,我只是尝试使用GET请求查询 jquery.org/projects 并返回它响应的字符串。怎么了?

如果我尝试实现一个自定义转换器(我在网上找到了一些例子),它会抱怨我没有实现抽象方法convert(F),而这些例子都没有。

谢谢。


答案 1

将 Retrofit2 和 ScalarsConverterFactory 添加到您的 Retrofit.Builder。

adapterBuilder = new Retrofit.Builder()
               .addConverterFactory(ScalarsConverterFactory.create())
               .addConverterFactory(GsonConverterFactory.create());

要使用 ScalarsCoverter,请将以下依赖项添加到您的构建批处理中

implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' 
implementation 'com.squareup.retrofit2:retrofit:2.9.0' //Adding Retrofit2

For API Call use: 
    Call <String> *****

安卓代码 :

.enqueue(new Callback<String>() {
    @Override
    public void onResponse(Call<String> call, Response<String> response) {
        Log.i("Response", response.body().toString());
        //Toast.makeText()
        if (response.isSuccessful()){
            if (response.body() != null){
                Log.i("onSuccess", response.body().toString());
            }else{
                Log.i("onEmptyResponse", "Returned empty response");//Toast.makeText(getContext(),"Nothing returned",Toast.LENGTH_LONG).show();
            }
        }

答案 2

我看了一下改造库,注意到它根据里面的类型类解析响应。所以你有两个选择:第一:根据来自服务器的响应创建一个类。Call<T>

第2步:获取响应并自行处理(不推荐 改造已经处理了。那么,为什么要使用改造,因为它是为这项工作量身定制的)。无论如何,而不是使用,并在此之后放置以下内容Call<String>Call<ResponseBody>Call<ResponseBody> signin = service.jquery();

call.enqueue(new Callback<ResponseBody>() {
  @Override
  public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
    // handle success
   String result = response.body().string();

  }

  @Override
  public void onFailure(Throwable t) {
    // handle failure
  }
});

推荐