改进Android基本和简单的问题

时间:2017-02-24 03:46:42

标签: android retrofit retrofit2

我的服务器返回简单的Json结果,如下所示,

{"message":"Upload Success.!"}

我正在尝试将结果导入Retrofit Model类

public class MyResponse {
    @SerializedName("message")
    String message;
}

我的界面类在这里

public interface MyService {

    @Multipart
    @POST("/")
    public retrofit2.Call<MyResponse> saveFile(@Part("filename") String fileName, @Part("photo") RequestBody photo);
}

这是我尝试获取结果的方式

Gson gson = new GsonBuilder()
                            .setLenient()
                            .create();

Retrofit retrofit = new Retrofit.Builder().baseUrl("http://xxxxxxx.com/fileupload.php/").addConverterFactory(GsonConverterFactory.create(gson)).build();

MyService service = retrofit.create(MyService.class);

retrofit2.Call<MyResponse> call = service.saveFile(filename, requestbody);

retrofit2.Response<MyResponse> response = call.execute();

但我无法将结果绑定到MyResponse

结果

02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117)
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:89)
02-23 21:22:43.074 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at retrofitquictest.com.retrofitquicktest.MainActivity$1.run(MainActivity.java:72)
02-23 21:22:43.075 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at java.lang.Thread.run(Thread.java:818)
02-23 21:22:43.075 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
02-23 21:22:43.075 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
02-23 21:22:43.075 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213)
02-23 21:22:43.075 20293-20410/retrofitquictest.com.retrofitquicktest W/System.err:     ... 8 more

我想我在这里犯了一个小错误。有人能识别出来吗?

2 个答案:

答案 0 :(得分:1)

根据改进文档,您的基本网址应仅包含您案例中网址的第一部分: 基本网址应为"http://xxxxxxx.com/ 并在帖子中添加其他部分,如@POST("fileupload.php/")。试一试也许它会对你有用。

谢谢!

答案 1 :(得分:-1)

请检查PostMan中的响应,如果在邮递员中你收到的回复与你说的相同,那么这意味着在你的应用程序中你得到错误响应,这是字符串格式,这就是你得到这种类型不匹配异常的原因。