以前一直用C# winform做开发。后来因为工作需要,开始学习安卓开发。因为年龄的缘故,记忆力越来越不好,所以在这里记录下学习过程中的知识点做备注。
1.安卓泛型接口。
这个是因为在编码时,需要针对大量的接口做封装,方便调用。但是C#的代码习惯和android还是有写区别的。所以一时间碰到不少麻烦。最终写成了一个类。如下:
这个类是使用hessian对象进行数据传输。当然您需要事先导入hessian.jar包
/** * * @param url 通讯地址 * @param interfaceName 接口名称 * @return 泛型返回对象 */ public T2 sendHeMessage(String url, String interfaceName) { try { HessianProxyFactory factory = new HessianProxyFactory(); HessianInterface basic = factory.create(HessianInterface.class, url); //获取方法 Method m = basic.getClass().getMethod(interfaceName,reqObj.getClass()); //调用方法 retObj =(T2) m.invoke(basic,reqObj); } catch (Exception e) { e.printStackTrace(); } return retObj; }
Android 中在调用网络传输时,不能在主线程中调用, 否则会报错误。所以调用时需要开线程。
private void startHession(){ new Thread(new Runnable() { @Override public void run() { ReqGetGoodsInfo obj = new ReqGetGoodsInfo(); obj.setMachId(ed_machId.getText().toString()); obj.setToken(ed_token.getText().toString()); obj.setGoodsBarcode(ed_goodsBarcode.getText().toString()); obj.setGoodsTypeId(ed_goodsTypeId.getText().toString()); obj.setPageNum(ed_pageNum.getText().toString()); obj.setPageSize(ed_pageSize.getText().toString()); //构造传输对象 HessianHandle<ReqGetGoodsInfo, RetGetGoodsInfo> handle = new HessianHandle(obj); //传输数据 RetGetGoodsInfo retObj= handle.sendHeMessage(url, InterfaceNames.getGoodsInfo); //处理反馈值 Message msg = new Message(); msg.what = 0x01; msg.obj = retObj; mHandler.sendMessage(msg); } }).start(); }