繁体   English   中英

预期为 BEGIN_OBJECT,但在第 4 行第 1 列路径 $

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM