背景:在做跟浪潮合作的一个上传机器人日志的功能模块,使用socket.io进行的开发,后台接口对应好几个功能,比如首先获取日志列表,再根据日志列表选择想要上传的具体日志。
那么问题来了:
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... arg0) {
// TODO Auto-generated method stub
Log.e("wy", "服务器连接成功" + arg0);
signIn();
}
}).on("robot", new Emitter.Listener() {
@Override
public void call(Object... args) {
***data*** = args[0];
Log.e("wy", "Socket返回数据:" + data);
JSONObject jasonObject = JSON.parseObject(data.toString());
Log.e("wy", "jasonObject数据:" + jasonObject);
Log.e("wy", "ActionType数据:" + jasonObject.get("ActionType"));
if (jasonObject.get("ActionType").equals("RequestLogList")) {
Log.e("wy", "上传日志列表:" + data.toString());
mRequestLogListEntity = JSON.parseObject(data.toString(), RequestLogListEntity.class);
ResponseLogList();
} else if (jasonObject.get("ActionType").equals("RequestLogUpload")) {
Log.e("wy", "上传指定日志:" + data.toString());
mRequestLogUploadEntity = JSON.parseObject(data.toString(), RequestLogUploadEntity.class);
mRequestLogUploadName=mRequestLogUploadEntity.getValueList().getLogName();
两个接口都是通过data进行的传输,两个data对应的实体并不一样,这样由于不能与具体的实体对应上就会报错
解决:原意是自己的知识盲点!!由于接口设计的外层ActionType字段是可以通用的,可以把jsonString转化为Json,只解析外层,再根据ActionType字段进行具体的业务对应
全代码
package com.example.hp.laochao;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.nkzawa.emitter.Emitter;
import com.github.nkzawa.socketio.client.IO;
import com.github.nkzawa.socketio.client.Socket;
import com.inspur.robot.model.AppVersionInfoBean;
import com.inspur.robot.model.ValueListBean;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import java.io.File;
import java.net.URISyntaxException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.xutils.x;
public class MainActivity extends Activity {
String meid = "86970302550751";
// 浪潮socket之SingIn
Socket socket;
AppVersionInfoBean appVersionInfoBean = new AppVersionInfoBean();
ValueListBean valueListBean = new ValueListBean();
SignInEntity signInEntity = new SignInEntity();
ActionTypeEntity mActionTypeEntit