首页 > 解决方案 > 发布请求改造 java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 2 行第 1 列路径 $

问题描述

我想发布这个对象

public class EditTask {

@SerializedName("id")
private int id;
@SerializedName("active")
private int active;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getActive() {
    return active;
}

public void setActive(int active) {
    this.active = active;
}

public EditTask(int id, int active) {
    this.id = id;
    this.active = active;
}

我的 API:

public interface TaskApi {
@GET("func.php?load")
Call<List<Task» getTaskList();

@FormUrlEncoded
@POST("func.php?add")
Call<String> addTask(@Field("name") String name);

@POST("func.php?edit")
Call<EditTask> editTask(@Body EditTask editTask);

我的仓库:

public class TaskRepository {

private static TaskRepository taskRepository;

public static TaskRepository getInstance() {
    if (taskRepository == null) {
        taskRepository = new TaskRepository();
    }
    return taskRepository;
}

private TaskApi taskApi;

public TaskRepository() {
    taskApi = RetrofitService.createService(TaskApi.class);
}

public void editTask(int id, int active) {
    EditTask editTask = new EditTask(id, active);

    taskApi.editTask(editTask).enqueue(new Callback<EditTask>() {
        @Override
        public void onResponse(Call<EditTask> call, Response<EditTask> response) {
            Log.i("Artemy", "cool");
        }

        @Override
        public void onFailure(Call<EditTask> all, Throwable t) {
            Log.i("Artemy", "notcool");
        }
    });
}

我的改造服务:

public class RetrofitService {

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

private static Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://loginov.tech/android/")
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();

public static <S> S createService(Class<S> serviceClass) {
    return retrofit.create(serviceClass);
}

我的视图模型:

public class TaskViewModel extends ViewModel {

private MutableLiveData<List<Task»mutableLiveData;
private TaskRepository taskRepository;

public void init() {
    if (mutableLiveData != null) {
        return;
    }
    taskRepository = TaskRepository.getInstance();
    mutableLiveData = taskRepository.getTasks();

}

public LiveData<List<Task»

getTaskRepository() {
    return mutableLiveData;
}

public void addTask(String name) {
    taskRepository.addTask(name);
}

public void editTask(int id, int active) {
    taskRepository.editTask(id, active);
}

} 主要活动:

public class TaskViewModel extends ViewModel {

private MutableLiveData<List<Task»mutableLiveData;
private TaskRepository taskRepository;

public void init() {
    if (mutableLiveData != null) {
        return;
    }
    taskRepository = TaskRepository.getInstance();
    mutableLiveData = taskRepository.getTasks();

}

public LiveData<List<Task»

getTaskRepository() {
    return mutableLiveData;
}

public void addTask(String name) {
    taskRepository.addTask(name);
}

public void editTask(int id, int active) {
    taskRepository.editTask(id, active);
}

我必须创建对服务器的发布请求并发布 int id 和 int 活动参数。但我总是收到错误:java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path 我也尝试发布 EditTasks 列表用@FormUrlEncoded 发帖没有帮助。

标签: androidretrofit

解决方案


推荐阅读