Ожидаемый BEGIN_OBJECT, но был STRING в строке 4, путь 1 столбца $ - PullRequest
0 голосов
/ 21 апреля 2020

Я застрял в этой проблеме уже 2 дня.

Да, прочитав все сообщения, я знаю, что ожидал объект, но вместо этого получил какую-то строку, но я не могу понять, где.

Имейте в виду, пожалуйста: - Это мой первый вопрос здесь, поэтому я прошу прощения, если я сделал какую-либо ошибку. - Я новичок в этом android java.

Обновление: я сделал еще несколько копаний, найденных из некоторых ответов, что сервер отправляет объект, пока я ожидаю строку, но обе строки 3- 4 из uploadImage () это объекты, поэтому я не знаю, где я могу ожидать строку.

Я получаю это, когда пытаюсь напечатать вызов после строки 4 uploadImage ():

retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall@3a7038f

(числа после @ изменяются случайным образом после каждого вызова)

Это проблемная c часть кода,

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 );
}

ImageClass

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;
    }
}

Это Logcat

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

1 Ответ

0 голосов
/ 21 апреля 2020

Я так не думаю, но ваша проблема может быть связана с "Заголовком" или "Имиджем".

String Title;
String Image;

В java переменная должна начинаться с маленькой буквы.

String title;
String image;

Если один из ваших объектов имеет имя «Изображение» или «Заголовок», это может быть ошибкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...