[英]Gson error expected begin_object but was string at line 1 column 1 path $
[英]Expected BEGIN_OBJECT but was STRING at line 4 column 1 path $
我已经被这个问题困住了 2 天了。
是的,在阅读了所有帖子后,我知道它期望一个 object 而是以某种方式得到一个字符串,但我似乎无法弄清楚在哪里。
请记住: - 这是我在这里的第一个问题,所以如果我犯了任何错误,我深表歉意。 - 我是 android java 的初学者。
更新:我从一些答案中进行了更多挖掘,发现服务器正在发送 object 而我期待一个字符串,但是 uploadImage() 的第 3-4 行它们都是对象,所以我不知道我可能在哪里期待一个字符串.
当我尝试在第 4 行 uploadImage() 之后打印调用时,我得到了这个:
retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall@3a7038f
(每次通话后@后的数字随机变化)
这是代码有问题的部分,
private void uploadImage() {
String Image = ImageToString();
String Title = img_title.getText().toString();
ApiInterface apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<ImageClass> call = apiInterface.uploadImage(Title,Image);
call.enqueue(new Callback<ImageClass>() {
@Override
public void onResponse(Call<ImageClass> call, Response<ImageClass> response) {
ImageClass imageClass = response.body();
Toast.makeText(MainActivity.this,"Server Response:"+imageClass.getResponse(),Toast.LENGTH_LONG).show();
img.setVisibility(View.GONE);
img_title.setVisibility(View.GONE);
ChooseBn.setEnabled(true);
UploadBn.setEnabled(false);
img_title.setText("");
}
@Override
public void onFailure(Call<ImageClass> call, Throwable t) {
/* UrlHelpers url = new UrlHelpers();
try {
int a = url.getHTTPResponseStatusCode("http://10.0.2.2/imageupload/");
img_title.setText(String.valueOf(a));
} catch (IOException e) {
e.printStackTrace();
}*/
t.printStackTrace();
}
});
}
ApiClient
package com.example.imagecolorizor;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.Headers;
public class ApiClient {
private static final String BaseUrl = "http://10.0.2.2/imageupload/";
private static Retrofit retrofit;
public static Retrofit getApiClient() {
Gson gson = new GsonBuilder()
.setLenient()
.create();
if(retrofit==null) {
retrofit = new Retrofit.Builder().baseUrl(BaseUrl).
addConverterFactory(GsonConverterFactory.create(gson)).build();
}
return retrofit;
}
}
ApiInterface如下,
package com.example.imagecolorizor;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.Call;
public interface ApiInterface {
@FormUrlEncoded
@Headers("Content-Type: application/json")
@POST("upload.php")
Call<ImageClass>uploadImage(@Field("title") String title,@Field("image") String image );
}
图像类
package com.example.imagecolorizor;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class ImageClass {
@SerializedName("title")
@Expose
private String title;
@SerializedName("image")
@Expose
private String image;
@SerializedName("response")
@Expose
private String response;
public String getResponse() {
return response;
}
}
这是日志猫
2020-04-21 14:07:59.036 24110-24110/com.example.imagecolorizor W/System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 4 column 1 path $
2020-04-21 14:07:59.037 24110-24110/com.example.imagecolorizor W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
2020-04-21 14:07:59.037 24110-24110/com.example.imagecolorizor W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
2020-04-21 14:07:59.037 24110-24110/com.example.imagecolorizor W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
2020-04-21 14:07:59.038 24110-24110/com.example.imagecolorizor W/System.err: at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:119)
2020-04-21 14:07:59.038 24110-24110/com.example.imagecolorizor W/System.err: at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:218)
2020-04-21 14:07:59.038 24110-24110/com.example.imagecolorizor W/System.err: at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:112)
2020-04-21 14:07:59.039 24110-24110/com.example.imagecolorizor W/System.err: at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
2020-04-21 14:07:59.039 24110-24110/com.example.imagecolorizor W/System.err: at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
2020-04-21 14:07:59.039 24110-24110/com.example.imagecolorizor W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
2020-04-21 14:07:59.039 24110-24110/com.example.imagecolorizor W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
2020-04-21 14:07:59.039 24110-24110/com.example.imagecolorizor W/System.err: at java.lang.Thread.run(Thread.java:764)
2020-04-21 14:07:59.040 24110-24110/com.example.imagecolorizor W/System.err: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 4 column 1 path $
2020-04-21 14:07:59.040 24110-24110/com.example.imagecolorizor W/System.err: at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
2020-04-21 14:07:59.040 24110-24110/com.example.imagecolorizor W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213)
2020-04-21 14:07:59.041 24110-24110/com.example.imagecolorizor W/System.err: ... 10 more
我不这么认为,但您的问题可能来自“标题”或“图像”。
String Title;
String Image;
在 java 中,变量必须以一个小字母开头。
String title;
String image;
如果您的 object 之一的名称为“图像”或“标题”,则可能是错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.