android+rxjava+gson 出错,大神帮忙看下。
WMERP 2016-08-10 08:55:35 本人新手刚自学java和安卓,现在自己摸索 SYBASE数据库+JAX-RS 和 android + retrofit + rxjava + gson : 现在总是在POST抛出异常,用CURL测试都是成功更新数据库,证明服务器端没有问题。
08-10 12:25:36.737 2385-2500/wm.wmb E/AndroidRuntime: FATAL EXCEPTION: RxCachedThreadScheduler-1
java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:62)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.StackOverflowError
at java.nio.charset.CharsetEncoderICU.getArray(CharsetEncoderICU.java:228)
at java.nio.charset.CharsetEncoderICU.encodeLoop(CharsetEncoderICU.java:169)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:415)
at java.io.OutputStreamWriter.convert(OutputStreamWriter.java:178)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:324)
at java.io.Writer.write(Writer.java:141)
at com.google.gson.stream.JsonWriter.string(JsonWriter.java:551)
at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:402)
at com.google.gson.stream.JsonWriter.beginObject(JsonWriter.java:307)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:235)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:903)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:240)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:240)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:903)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:240)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:240)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:903)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:240)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:113)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:240)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:903)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory
Android测试页面按钮代码如下(GET可以正常运行)
Entity ls_ent=new Entity();
ls_ent.setchnname("测试公式");
ls_ent.setengname("tstddd");
Gson jsonObject =new Gson();
jsonObject.toJson(ls_ent);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.1.3:8080/wm1/rest/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
apiService.setEnInfo(jsonObject)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ExResult>() { //32
@Override
public void onCompleted() {
mProgressBar.setVisibility(View.GONE);
// mtv1.setText("OK");
}
@Override
public void onError(Throwable e) {
mProgressBar.setVisibility(View.GONE);
mTvContent.setText(e.getMessage());
mtv1.setText("NO");
}
@Override
public void onNext(ExResult getEnInfoResponse) {
if (getEnInfoResponse.getresult() == "Y") {
mTvContent.setText("修改公司名称成功");
} else {
mTvContent.setText("修改公司名称失败");
}
}
}); //32
///////////////////////////////////API
package wm.wmb;
import com.google.gson.Gson;
import java.util.List;
import retrofit.Call;
import retrofit.http.Body;
import retrofit.http.GET;
import retrofit.http.POST;
import retrofit.http.Query;
import rx.Observable;
import wm.wmb.model.Entity;
import wm.wmb.model.ExResult;
import wm.wmb.response.GetEnInfoResponse;
import wm.wmb.response.GetIpInfoResponse;
/**
* @Project retrofitrxandroiddagger2
* @Packate com.micky.retrofitrxandroiddagger2.data.api
* @Description
* @Author Micky Liu
* @Email mickyliu@126.com
* @Date 2015-12-21 17:22
* @Version 0.1
*/
public interface ApiService {
/* @GET("service/getIpInfo.php")
Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);*/
@GET("service/getIpInfo.php")
Observable<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);
@GET("Entity/NameList")
Observable<List<Entity>> getEnInfo();
@POST("Entity/Nameset")
Observable<ExResult> setEnInfo(@Body Gson jsonObject);
}