Я застрял в этой проблеме уже 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