使用自己写的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. 【Asp.Net】小BUG汇总[更新]

    目录结构 1.Dictionary<T>遍历 2.Asp.net网站部署在C盘无法上传下载文件 3.Asp.Net网站发布后远程无法访问 4.GDI+中发生一般性错误 1.Dictiona ...

  2. C语言结构体中的函数指针

      这篇文章简单的叙述一下函数指针在结构体中的应用,为后面的一系列文章打下基础 本文地址:http://www.cnblogs.com/archimedes/p/function-pointer-in ...

  3. Python的面向对象3

    接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...

  4. MVC + JQUERY + AJAX

  5. php自学笔记1

    PHP(Personal Home Page的缩写,现已更名Hypertext Preprocessor“超文本预处理器”)静态web开发:html,内容一成不变动态web开发: php(Zend). ...

  6. bzoj 3851: 2048 dp优化

    3851: 2048 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 22  Solved: 9[Submit][Status] Description T ...

  7. Eclipse右键New菜单项的自定义设置

    大家都知道一般在Eclipse中新建一个项目或者文件都是通过菜单项的File-New来创建,然而有些右键出来的选项可能从来都不会使用到,而有些可能会常用到但是右键中又没有,这个时候就可以自定义New中 ...

  8. Android 向系统添加一个联系人信息contact

    private void writeContacts() { Uri rawContacts = Uri.parse("content://com.android.contacts/raw_ ...

  9. easyui datagrid单击单元格选择此列

    示例代码实现单击jquery easyui datagrid的单元格时,取消datagrid默认选中高亮此行的样式,改为选中单击的单元格所在的列,高亮此列上的所有单元格.可以配置全局single变量, ...

  10. 李洪强漫谈iOS开发[C语言-025]-赋值运算符案例