从零开始搭建android App 日志(2)

在日志(1)中我们简谈了客户端和服务器端的数据交互问题

所以,在此将对数据的传输类型做深入介绍

在我们的目标中,客户端以普通的post方式提交数据,所以提交数据的格式一般是字符串类型

但是有时候我我们会提交图片数据,所以,我们引入一个bitmap和string相互转换的类

public class Bitmap_String {

    /**
     * 图片转成string
     *
     * @param bitmap
     * @return
     */
    public static String convertIconToString(Bitmap bitmap)
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] appicon = baos.toByteArray();// 转为byte数组
        return Base64.encodeToString(appicon, Base64 .DEFAULT);

    }

    /**
     * string转成bitmap
     *
     * @param st
     */
    public static Bitmap convertStringToIcon(String st)
    {
        // OutputStream out;
        Bitmap bitmap = null;
        try
        {
            // out = new FileOutputStream("/sdcard/aa.jpg");
            byte[] bitmapArray;
            bitmapArray = Base64.decode(st, Base64.DEFAULT);
            bitmap =BitmapFactory.decodeByteArray(bitmapArray, 0,
                            bitmapArray.length);
            // bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            return bitmap;
        }
        catch (Exception e)
        {
            return null;
        }
    }

}
但是,在我们一般手机相片转换成string的长度是以百万级算的,而我们对于好友头像之类的头像并不是需要特别高清,一般是显示缩略图,所以有时候我们可以对bitmap图片进行压缩,谷歌也提供了压缩图片的方式,我们只要进行稍微的编写就可以完成图片压缩功能

    //压缩图片
    public Bitmap transImage(Bitmap bitmap, int width, int height)
    {


            int bitmapWidth = bitmap.getWidth();
            int bitmapHeight = bitmap.getHeight();
            // 缩放图片的尺寸
            float scaleWidth = (float) width / bitmapWidth;
            float scaleHeight = (float) height / bitmapHeight;
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);
            // 产生缩放后的Bitmap对象
            Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, false);

        return  resizeBitmap;


    }
我们只要这样
transImage(bitmapMy,100,100)
就可以把bitmap图片转换成的字符串长度缩略成万级的,虽然有些图片压缩之后是效果不尽人意,但是我们可以改变 width 和 height 的大小来得到我们需要的效果
这样我们就可以把图片当作字符串转换给服务器端了
在服务器端中,图片的字符串可以转换成byte[]类型的数据,以便我们存储在数据库中的image类型字段,字符串转byte[].可以有多个选择,其中Unicode和ascii类型转换都可以,
但是在提取图片时要进行相应格式的转换
1、        
System.Text.UnicodeEncoding converter = new System.Text.UnicodeEncoding();  
byte[] inputBytes =converter.GetBytes(inputString);       
string  inputString = converter.GetString(inputBytes);
2、        
string inputString = System.Convert.ToBase64String(inputBytes);        
byte[] inputBytes = System.Convert.FromBase64String(inputString);
C#中我们可以把数据列表转换成jsonarray格式的字符串再传递给客户端
               string friendList= JsonConvert.SerializeObject(list数据).ToString();
                Response.Write("{\"friendsList\":"+friendList+"}");
在客户端中
private JSONArray friendList=null;

 friendList= response.getJSONArray("friendsList");
然后我们就可以把jsonarray数据转换成list列表绑定到我们的listview中
android studio 中默认使用的是 org.json 
而org.json 中并不包含 net.sf.json 中的toList()和.toCollection()方法,所以我们可以导入net.sf.json包,但是我们要把org.json的包删除,不然会引入重复而出错,当然我们也可以使用谷歌的gson
我使用的是原自带的org.json,所以得自己编写toList()方法,
public class JsonArrayToList {

    public List<PersonBean> toList(JSONArray jsonArray) throws JSONException {
        JSONObject jsonObject;
        List<PersonBean> list = new ArrayList<PersonBean>();
        if(jsonArray!=null){
        for (int i = 0; i < jsonArray.length(); i++)

        {

            jsonObject = jsonArray.getJSONObject(i);

            list.add(getMap(jsonObject));

        }}
        return list;
    }
    public static PersonBean getMap(JSONObject jsonObject)

    {



        try

        {
            @SuppressWarnings("unchecked")

            Iterator<String> keyIter = jsonObject.keys();

            String key;

            String value;

            PersonBean valueMap = new PersonBean();

            while (keyIter.hasNext())

            {

                key = (String) keyIter.next();

                value = jsonObject.get(key).toString();

                if(key.equals("usersId")){
                    valueMap.setUsersId(Integer.parseInt(value));
                    continue;
                }
                if(key.equals("password")){
                    valueMap.setPassword(value);
                    continue;
                }
                if(key.equals("userName")){
                    valueMap.setUserName( value);
                    continue;
                }

                if(key.equals("userImg")){
                    valueMap.setUserImg( value);
                    continue;
                }

            }

            return valueMap;

        }

        catch (JSONException e)

        {

            e.printStackTrace();

        }

        return null;

    }
}
好了,我们这就可以完成我的信息的创建和修改,我的好友列表的加载功能了

此博文为个人日志文档

欢迎大神给修改意见

邮箱 1159828111@qq.com





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值