使用自己写的StringConverter 来封装的 Converter 来解析String private static final RestAdapter CAMERA_CLIENT_NETWORK_SERVICE_REST_ADAPTER_APX = new RestAdapter.Builder()        .setEndpoint("http://192.168.0.1")        .setConverter(new StringConverter())        .setClient(new OkClient())        .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE)        .build();

package com.mysnapcam.mscsecure.util;

import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.lang.reflect.Type;

import retrofit.converter.ConversionException;import retrofit.converter.Converter;import retrofit.mime.MimeUtil;import retrofit.mime.TypedInput;import retrofit.mime.TypedOutput;

/** * Created by Administrator on 2016/5/17. * Imitation GsonConverter write StringConverter because when you add Apx returns the String value of the data I wish HTTP response was correct */public class StringConverter implements Converter {    private String charset;

    public StringConverter() {        this("UTF-8");    }

    public StringConverter(String charset) {        this.charset = charset;    }

    @Override    public Object fromBody(TypedInput body, Type type) throws ConversionException {        String charset = this.charset;        if (body.mimeType() != null) {            charset = MimeUtil.parseCharset(body.mimeType(), charset);        }        InputStreamReader isr = null;        try {            isr = new InputStreamReader(body.in(), charset);            StringBuffer sb = new StringBuffer();            char[] b = new char[1024];            int i = -1;            while ((i = isr.read(b)) > -1) {                sb.append(b,0,i);            }

            return sb.toString();        } catch (IOException e) {            throw new ConversionException(e);        } finally {            if (isr != null) {                try {                    isr.close();                } catch (IOException ignored) {                }            }        }

    }

    @Override    public TypedOutput toBody(Object object) {        try {            return new StringTypedOutput(((String) object).getBytes(charset), charset);        } catch (UnsupportedEncodingException e) {            throw new AssertionError(e);        }    }

    private static class StringTypedOutput implements TypedOutput {        private final byte[] stringBytes;        private final String mimeType;

        StringTypedOutput(byte[] StringBytes, String encode) {            this.stringBytes = StringBytes;            this.mimeType = "application/json; charset=" + encode;        }

        @Override        public String fileName() {            return null;        }

        @Override        public String mimeType() {            return mimeType;        }

        @Override        public long length() {            return stringBytes.length;        }

        @Override        public void writeTo(OutputStream out) throws IOException {            out.write(stringBytes);        }    }}

模仿GsonConverter 写的StringConverter 解析String字符串的更多相关文章

  1. JAVA代码解析String字符串(json格式的)

    java解析String字符串(json格式) 需要jar包:json-lib-2.4-jdk15.jar 一. String str = "{\"name\":\&qu ...

  2. java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)

    一.String字符串 问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 class Demo17 { ...

  3. 【超值分享】为何写服务器程序需要自己管理内存,从改造std::string字符串操作说起。。。

    服务器程序为何要进行内存管理,管中窥豹,让我们从string字符串的操作说起...... new/delete是用于c++中的动态内存管理函数,而malloc/free在c++和c中都可以使用,本质上 ...

  4. 一个用C++写的Json解析与处理库

    什么是Json?这个库能做什么? JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is e ...

  5. Json转model对象,model转json,解析json字符串

    GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...

  6. java 写一个JSON解析的工具类

    上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能 ...

  7. 一、JSON解析与字符串化

    JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 filter,指定要序列化的 ...

  8. 深入解析String#intern

    转自:https://tech.meituan.com/in_depth_understanding_string_intern.html 深入解析String#intern john_yang ·2 ...

  9. JS的全局函数eval解析JSON字符串

    JavaScript eval() 函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需. ...

随机推荐

  1. PL/SQL学习(一)

    原文参考:http://plsql-tutorial.com/ 组成: 声明部分(可选) 执行部分(必选) 异常处理(可选)       声明:         DECLARE       执行:   ...

  2. markdown与textile之间互相转换

    markdown与textile之间互相转换 redmine中默认使用的是textile那么从别的地方复制过来的markdown格式的内容需要进行转换 找到一款工具叫做pandoc http://jo ...

  3. Couldn't get lock for %t/vertx.log

    今天在启动vertx框架的项目时,报“Couldn't get lock for %t/vertx.log”的错误. 解决方案: 1,找出vertx.log的目录.一般在(C:\Users\Admin ...

  4. 如何在版本控制工具中管理Sencha Architect的項目

    根據數次痛苦的經歷結合stack overflow上的解答,發現原來還是可以使用svn.git之類的版本控制工具管理Sencha Architect生成的項目的. 具體的要點如下,假定項目記作{PRO ...

  5. 修改phpmyadmin上传文件大小限制

    当你想将SQL语句,导入phpmyadmin 时,发现自己的sql语句文本大小 大于 phpmyadmin的课上传的文本大小. 默认phpmyadmin上传文件大小为2M,如果想要phpmyadmin ...

  6. C#网页自动登录和提交POST信息的多种方法(转)

    网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser.WebClient.HttpWebRequest这三 ...

  7. it warning: LF will be replaced by CRLF解决

    LF是linux下的换行符,而CRLF是enter + 换行,这就知道为啥我当初拷贝第一份代码的时候没报这个错误了,因为第一份是在win下写的. 然后解决办法: git config --global ...

  8. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  9. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  10. jquery之ajaxfileupload异步上传插件

    点我下载工程代码由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/d ...