【发布时间】:2017-08-26 05:30:09
【问题描述】:
我想从 JSON 中获取一些数据,但是 gson 给出了错误。我想知道我该如何解决这个问题?
我正在使用 dagger2(这部分 100% 可以正常工作)和 rxJava(这部分总是调用 onError 方法)。
我的模特:
@Data
@NoArgsConstructor
public class GradeModel {
//I'm using lombok to generate getters and setters.
@SerializedName("grade")
@Expose
private DecimalFormat grades;
@SerializedName("grades")
@Expose
private GradeModel listGrades;
private String matter;
private int fault;
}
我的 JSON:
grades: [
{
"class": "math"
"grade": 4.5,
"next_dates":[
{
"exam": "03/03/2017",
"homework": "03/03/2017"
}
]
}
{
"class": "port"
"grade": 8,
"next_dates":[
{
"exam": "03/05/2017",
"homework": "03/03/2017"
}
]
}
]
我的回应:
public class GradeResponse {
@Inject
Retrofit retrofit;
@Inject
MainPresenter mainPresenter;
public void getGradeRx() {
MyApplication.getMainComponent().injectIntoGradeResponse(this);// informando ao dagger sobre o uso de um component e a necessidade de injetar dependência
Subscription getGrade = retrofit
.create(GradeService.class)
.getGrade()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(model -> {
// transform model
return model.getListGrades();
})
.subscribe(new Observer<GradeModel>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.i(TAG, "saporra vai me matar ainda");
}
@Override
public void onNext(GradeModel grades) {
Log.i(TAG, "caralhoooooo " + grades.getGrades());
//mainPresenter.setListGrades(grades);
}
});
}
}
我的改造:
@Module
public class RetrofitModule {
@Provides
@PerActivity
Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
//gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
return gsonBuilder.create();
}
@Provides
@PerActivity
public OkHttpClient provideHttpClient() {
return new OkHttpClient().newBuilder().build();
}
@Provides
@PerActivity
public Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(BASE_URL)
.client(okHttpClient)
//converts Retrofit response into Observable
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
return retrofit;
}
}
我的服务:
public interface GradeService {
@GET("grades_json.json")
Observable<GradeModel> getGrade();
}
错误:
com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 在第 1 行列接受格式错误的 JSON 1 条路径 $
【问题讨论】:
-
把
grades:从JSON中去掉就对了 -
如果不从 JSON 中删除成绩,我可以做些什么?
-
为什么不能编辑
grades_json.json?它不是正确的 JSON。 -
您缺少一些逗号,并且 JSON 始终为任何值提供带引号的键。 jsonlint.com
-
因为不是我的文件,所以我复制了那个 json 并在没有“成绩:”的情况下上线,仍然是相同的 onError 方法,没有任何改变。
标签: java android gson rx-java rx-android