Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从2获取字符串响应正文_Java_Android_Eclipse_Retrofit_Square - Fatal编程技术网

Java 从2获取字符串响应正文

Java 从2获取字符串响应正文,java,android,eclipse,retrofit,square,Java,Android,Eclipse,Retrofit,Square,我用的是老式的 @GET("/loginUser") public Call<Response> login( @Query("email") String email, @Query("password") String password, Callback<Response> callback); @GET(“/loginUser”) 公用电话登录( @查询(“电子邮件”)字符串电子邮件

我用的是老式的

@GET("/loginUser")
    public Call<Response> login(
            @Query("email") String email,
            @Query("password") String password,
            Callback<Response> callback);
@GET(“/loginUser”)
公用电话登录(
@查询(“电子邮件”)字符串电子邮件,
@查询(“密码”)字符串密码,
回调(回调);
现在我不想得到“User”类,但是我想得到一个字符串响应

之前我们使用的是“响应”,但在第2节中没有响应

如何在不使用任何json解析的情况下从服务器获取字符串响应或全文响应?

创建此类

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Converter;
import retrofit2.Retrofit;

public class ToStringConverterFactory extends Converter.Factory {
    private static final MediaType MEDIA_TYPE = MediaType.parse("text/plain");


    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        if (String.class.equals(type)) {
            return new Converter<ResponseBody, String>() {
                @Override
                public String convert(ResponseBody value) throws IOException {
                    return value.string();
                }
            };
        }
        return null;
    }

    @Override
    public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {

        if (String.class.equals(type)) {
            return new Converter<String, RequestBody>() {
                @Override
                public RequestBody convert(String value) throws IOException {
                    return RequestBody.create(MEDIA_TYPE, value);
                }
            };
        }
        return null;
    }
}
编辑: 你必须把它定义为

@GET("/loginUser")
    public Call<String> login(
            @Query("email") String email,
            @Query("password") String password);
@GET(“/loginUser”)
公用电话登录(
@查询(“电子邮件”)字符串电子邮件,
@查询(“密码”)字符串(密码);
改型2中不支持回调,因此必须将其删除。要使其异步,必须执行以下操作

Call<String> call = service.login(username, password);
call.enqueue(new Callback<String>() {}
Call=service.login(用户名、密码);
call.enqueue(新回调(){}
编辑以上代码是针对改装2 beta 3的。对于改装:2.1.0,您必须创建ToString ConverterFactory作为-

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Converter;
import retrofit2.Retrofit;

public class ToStringConverterFactory extends Converter.Factory {
    private static final MediaType MEDIA_TYPE = MediaType.parse("text/plain");


    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        if (String.class.equals(type)) {
            return new Converter<ResponseBody, String>() {
                @Override
                public String convert(ResponseBody value) throws IOException {
                    return value.string();
                }
            };
        }
        return null;
    }

    @Override
    public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations,
                                                          Annotation[] methodAnnotations, Retrofit retrofit) {

        if (String.class.equals(type)) {
            return new Converter<String, RequestBody>() {
                @Override
                public RequestBody convert(String value) throws IOException {
                    return RequestBody.create(MEDIA_TYPE, value);
                }
            };
        }
        return null;
    }
}
import java.io.IOException;
导入java.lang.annotation.annotation;
导入java.lang.reflect.Type;
导入okhttp3.MediaType;
导入okhttp3.RequestBody;
进口okhttp3.0响应电子书;
进口改型2.变频器;
进口改装2.改装;
公共类ToString ConverterFactory扩展了Converter.Factory{
私有静态final MediaType MEDIA_TYPE=MediaType.parse(“text/plain”);
@凌驾
公共转换器响应BodyConverter(类型、注释[]注释、改装){
if(String.class.equals(type)){
返回新转换器(){
@凌驾
公共字符串转换(ResponseBy值)引发IOException{
返回值;
}
};
}
返回null;
}
@凌驾

public Converter改型2.0.0-beta3添加了一个转换器标量模块。该模块提供了一个转换器。用于将字符串、8个基本类型和8个装箱基本类型转换为文本/纯文本体的工厂。请在普通转换器之前安装此模块,以避免将这些简单标量传递给JSON转换器

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .client(getClient())
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

GsonConverterFactory上方的ScalarsConverterFactory检查您的导入是否存在错误。您的所有导入都应该来自Reformation2和okhttp3,而不是Reformation2。我已检查所有IMort都是Reformation2,但是还有一件更重要的事情,我是否应该执行Calllogin(xxxx)操作?是的,谢谢,很好,但是第二个覆盖功能似乎不好,如果你能检查一下,我在超类中也找不到相同的参数。你使用的是哪个beta版本的改型2?尝试使用beta3。也把我发布的导入内容放进去。这些都适用于me@andro以上代码是针对beta-3的。请检查编辑以获取更新的代码改装2.1.0如何升级ScalarsConverterFactory请在回答中添加该选项
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .client(getClient())
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();