String转为Json

背景:在做跟浪潮合作的一个上传机器人日志的功能模块,使用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 mActionTypeEntity;
    RequestLogListEntity mRequestLogListEntity;
    RequestLogUploadEntity mRequestLogUploadEntity;
    String mRequestLogUploadName;
    ResponseLogListEntity mResponseLogListEntity = new ResponseLogListEntity();
    RequestStartTraceEntity mRequestStartTraceEntity = new RequestStartTraceEntity();
    RequestStopTraceEntity mRequestStopTraceEntity = new RequestStopTraceEntity();
    ValueListEntity mValueListEntity = new ValueListEntity();
    ResponseLogUploadEntity mResponseLogUploadEntity = new ResponseLogUploadEntity();
    ResponseLogUpValueListEntity mResponseLogUpValueListEntity = new ResponseLogUpValueListEntity();
    ResponseStartTraceEntity mResponseStartTraceEntity = new ResponseStartTraceEntity();
    ResponseStopTraceEntity mResponseStopTraceEntity = new ResponseStopTraceEntity();
    ResponseStartTraceListEntity mResponseStartTraceListEntity = new ResponseStartTraceListEntity();
    ResponseStopTraceListEntity mResponseStopTraceListEntity = new ResponseStopTraceListEntity();
    List<String> mArrayList = new ArrayList<>();
    UploadLogSuccessEntity mUploadLogSuccessEntity;
    Object data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view) {

        switch (view.getId()) {
            case R.id.btn_signin: {
                Toast.makeText(getApplicationContext(), "签到", Toast.LENGTH_SHORT).show();
                try {
                    IO.Options options = new IO.Options();
//                  options.timeout =60;
                    options.forceNew = true;
                    options.reconnection = false;
                    socket = IO.socket("http://117.xx.XX.xx:xxxx", options);

                } catch (URISyntaxException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

//                socket.emit("robot", JSON.toJSONString(signInEntity));
                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();

                            UploadLogs();
                        } else if (jasonObject.get("ActionType").equals("RequestStartTrace")) {
                            Log.e("wy", "开启全量日志:" + data.toString());
                            mRequestStartTraceEntity = JSON.parseObject(data.toString(), RequestStartTraceEntity.class);
                            responseStartTrace();
                        } else if (jasonObject.get("ActionType").equals("RequestStopTrace")) {
                            Log.e("wy", "结束全量日志:" + data.toString());
                            mRequestStopTraceEntity = JSON.parseObject(data.toString(), RequestStopTraceEntity.class);
                            responseStopTrace();
                        }

                    }
                }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {

                    @Override
                    public void call(Object... args) {
                        Object data = args[0];
                        Log.e("wy", "socket连接断开args:" + args);
                        Log.e("wy", "socket连接断开data:" + data);

                    }

                }).on(Socket.EVENT_CONNECT_TIMEOUT, new Emitter.Listener() {
                    @Override
                    public void call(Object... args) {
                        Log.e("wy", "服务器连接超时");
                    }
                }).on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
                    @Override
                    public void call(Object... args) {
                        Log.e("wy", "服务器连接错误");

                    }
                }).on(Socket.EVENT_ERROR, new Emitter.Listener() {
                    @Override
                    public void call(Object... args) {
                        Log.e("wy", "事件 event 错误" + args[0]);
                    }
                });
                socket.connect();
                break;
            }
        }
    }

    private void responseStopTrace() {
        mResponseStopTraceListEntity.setResult(true);
        mResponseStopTraceListEntity.setLocalTime(getTime());
        mResponseStopTraceListEntity.setLogName("robot_86970302550751_20190730.txt");
        mResponseStopTraceListEntity.setOtherInfo(null);

        mResponseStopTraceEntity.setActionType("ResponseStopTrace");
        mResponseStopTraceEntity.setRequestId(mRequestStopTraceEntity.getRequestId());
        mResponseStopTraceEntity.setValueList(mResponseStopTraceListEntity);

        String jsonString = JSON.toJSONString(mResponseStopTraceEntity);
        Log.e("wy", "回复结束全量日志jsonString:" + jsonString);
        socket.emit("robot", jsonString);
    }

    private void responseStartTrace() {
        mResponseStartTraceListEntity.setLocalTime(getTime());
        mResponseStartTraceListEntity.setResult(true);
        mResponseStartTraceListEntity.setOtherInfo(null);
        mResponseStartTraceEntity.setActionType("RequestStartTrace");
        mResponseStartTraceEntity.setRequestId(mRequestStartTraceEntity.getRequestId());
        mResponseStartTraceEntity.setValueList(mResponseStartTraceListEntity);
        String jsonString = JSON.toJSONString(mResponseStartTraceEntity);
        Log.e("wy", "回复开启全量日志jsonString:" + jsonString);
        socket.emit("robot", jsonString);
        ;
    }

    public void UploadLogs() {
        // TODO Auto-generated method stub
        Log.e("wy", "mMeid: " + meid);
//        String upUrl = "/storage/emulated/legacy/leotech/logs/robot_869703025507517_2019-06-20.log";//指定要上传的文件
//        String upUrl = "/storage/emulated/legacy/leotech/logs/"
//        		+ Logs.today_filename;//指定要上传的文件
//        String upUrl = "/mnt/sdcard/leotech/logs/"
//                + Logs.today_filename;//指定要上传的文件
        String upUrl = "/mnt/sdcard/leotech/logs/"
                + mRequestLogUploadName;//指定要上传的文件

        Log.e("wy", "upUrl: " + upUrl);
//        final ProgressDialog dia = new ProgressDialog(this);
//        dia.setMessage("上传中..");
//        dia.show();
        RequestParams params = new RequestParams("http://117.50.75.91:3005/api/file/upload");
        params.addBodyParameter("robotId", meid);
        params.addBodyParameter("file", new File(upUrl));
        x.http().post(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                //加载成功回调,返回获取到的数据
                Log.e("wy", "onSuccess: " + result);
//{"code":"0000","fileKey":"8f1237dd-815d-4262-8883-a00f29c4d2b1","msg":"文件上传成功"}
                mUploadLogSuccessEntity = JSON.parseObject(result, UploadLogSuccessEntity.class);


                ResponseLogUpload();
            }

            @Override
            public void onFinished() {
//                dia.dismiss();//加载完成
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Log.e("wy", "上传出错: " + ex);
            }
        });
    }

    private void ResponseLogUpload() {
        mResponseLogUpValueListEntity.setLocalTime(getTime());
        mResponseLogUpValueListEntity.setFileKey(mUploadLogSuccessEntity.getFileKey());
        mResponseLogUpValueListEntity.setLogName(mRequestLogUploadEntity.getValueList().getLogName());
        mResponseLogUpValueListEntity.setResult(true);
        mResponseLogUpValueListEntity.setOtherInfo(null);

        mResponseLogUploadEntity.setActionType("ResponseLogUpload");
        mResponseLogUploadEntity.setRequestId(mRequestLogUploadEntity.getRequestId());
        mResponseLogUploadEntity.setValueList(mResponseLogUpValueListEntity);
        String jsonString = JSON.toJSONString(mResponseLogUploadEntity);
        Log.e("wy", "上传日志jsonString:" + jsonString);
        socket.emit("robot", jsonString);

    }

    public  List<String> getFilesAllName(String path) {
        File file=new File(path);
        File[] files=file.listFiles();
        if (files == null){Log.e("error","空目录");return null;}
        List<String> s = new ArrayList<>();
        for(int i =0;i<files.length;i++){
            s.add(files[i].getName());
        }
        return s;
    }

    private void ResponseLogList() {
        mArrayList=getFilesAllName("/mnt/sdcard/leotech/logs/");
        Log.e("wy", "获取到本地日志列表第一个文件名字:" + mArrayList.get(0));
        Log.e("wy", "获取到本地日志列表:" + mArrayList);
        mValueListEntity.setLocalTime(getTime());
        mValueListEntity.setLogList(mArrayList);
        mResponseLogListEntity.setActionType("ResponseLogList");
        mResponseLogListEntity.setRequestId(mRequestLogListEntity.getRequestId());
        mResponseLogListEntity.setValueList(mValueListEntity);
        String jsonString = JSON.toJSONString(mResponseLogListEntity);
        Log.e("wy", "上传日志列表jsonString:" + jsonString);
        socket.emit("robot", jsonString);
    }


    private void signIn() {
        appVersionInfoBean.setMainVersion("1.0");
        appVersionInfoBean.setSubVersion("0.9");

        appVersionInfoBean.setLastUpdateTime("20190706080130");
        valueListBean.setRobotId("86970302550751");
        valueListBean.setRobotName("测试机器人wy1");
        valueListBean.setMasterIP("192.168.0.188");
        valueListBean.setSlaveIP("192.168.0.188");
        valueListBean.setMasterMac("00:0a:f5:5a:b1:9c");
        Log.e("wy", "获取当前时间:" + getTime());
        valueListBean.setLocalTime(getTime());
        valueListBean.setAppVersionInfo(appVersionInfoBean);
//                        valueListBean.setOtherInfo(null);
        signInEntity.setActionType("SignIn");
        signInEntity.setRequestId("1234567");
        signInEntity.setSignatureValue("123kddfsdkfdskfjfsdfd");
        signInEntity.setValueList(valueListBean);
        String jsonString = JSON.toJSONString(signInEntity);
        Object json = JSON.toJSON(signInEntity);
        Log.i("wy", "jsonString:" + jsonString);
        Log.i("wy", "json:" + json);
        socket.emit("robot", jsonString);
//                        socket.disconnect();
    }

    private String getTime() {
        Date date = new Date();
        DateFormat format1 = new SimpleDateFormat("yyyyMMddHHmmss");
        return format1.toString();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值