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

}

...全文
621 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
怀君 2016-09-12
  • 打赏
  • 举报
回复
我今天也出现你这样的问题了。
WMERP 2016-09-04
  • 打赏
  • 举报
回复
最近忙着搞ERP的功能开发,PB,我android也是个新手,QQ:3886580
WMERP 2016-08-25
  • 打赏
  • 举报
回复
一样的BEAN结构,你不管中间的,只要两边对上就行,不管中间是JSON还是XML传输,解析过程全部交给依赖包自动处理了
ludan_2016 2016-08-25
  • 打赏
  • 举报
回复
能要个QQ 联系吗? 详细请教下。
ludan_2016 2016-08-23
  • 打赏
  • 举报
回复
求帮助 Observable<ExResult> setEnInfo(@Body Entity ls_ent); 这里传入bean结构 那么 apiService.setEnInfo(jsonObject)还传jsonObject吗?
WMERP 2016-08-11
  • 打赏
  • 举报
回复
第一次用这个论坛,这个积分能分给自己不?自己发帖自己回答的。
adfldk 2016-08-11
  • 打赏
  • 举报
回复
头痛
WMERP 2016-08-11
  • 打赏
  • 举报
回复
我自己摸索出问题了,原来在参数传递那里问题: @POST("Entity/Nameset") Observable<ExResult> setEnInfo(@Body Gson jsonObject); 下面是服务器WEB jax-rs 的代码: @POST @Path("/Nameset") @Produces(MediaType.APPLICATION_JSON + ";charset=" + "UTF-8") @Consumes(MediaType.APPLICATION_JSON + ";charset=" + "UTF-8") public ExResult Entiynameset(EntityStru enstru) { String ls_chname=""; String ls_enname=""; String ls_res="N"; ls_chname=enstru.getchnname(); ls_enname=enstru.getengname(); ExResult res=new ExResult(); res.setresultype("update-entity-name"); String sql = "update entity set chn_name='"+ls_chname+"',eng_name='"+ls_enname+"'"; long rs = 0; try { super.getConn(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeUpdate(); if(rs>0){ ls_res="Y"; } } catch (Exception ex) { ex.printStackTrace(); } finally { try { super.closeAll(); } catch (Exception ex) { ex.printStackTrace(); } } res.setresult(ls_res); return res; } 传入和返回都是JSON数据结构 传入参数是个POJO,bean结构,但是在Android写成了JSON格式,改成 一样对应结构就可以了 Observable<ExResult> setEnInfo(@Body Gson jsonObject); 改成 Observable<ExResult> setEnInfo(@Body Entity ls_ent); 再修改按键响应里面的入参就可以了,另外Onnext那里要修改一下,因为onnext永远是要获取空值才停止,所以要先确认不是空值。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧