前言:

虽然做研发谁都想周边的配合都很到位,只要做好自己的事情就好,但是现实往往不会如此的一番如意的轻松, such as 昨日我在修复一个android APP的地区选择功能时候,发现这个地区的选项不是服务端提供,iOS客户端是从一个文件中加载出来的,那么问题来了,我所能找到的文件只有iOS工程中的ProvincesAndCities.plist,这个文件是iOS存数据的文件,android要想读是非常困难的,废话不多说,路在脚下,还是要前行,让我们想办法解决它!

正文:

iOS方面操作

我先简短的介绍一下解决的思路,.plist文件里面放的可能是数组也可能是字典,我们如果直接用NSLog方法打印数组,字典的时候,我们会得到的
clipboard.png
就是这样的编码格式的内容,这显然是不能用在android的,所以我们的思路是要将.plist中的内容打印为我们能处理的内容,那就是JsonString了。

clipboard.png
所以iOS这边的做法,如图片所示,先将plist文件放入,然后读取出内部的数组信息,然后用SBJson转化为NSString,然后在NSLog打印出来,运行程序我们会得到

clipboard.png
很好我们已经进行一半了,然后在控制台复制这些数据到一个文本文件中如

clipboard.png
至此iOS这边的处理完成了,然后是txt文件跟android之间的处理手法,让我们继续看下去

android方面操作

首先现在android工程中的res文件夹中新建raw文件夹,然后将我们得到的areainfo.txt,放入到这个raw文件夹中,细心的你可能注意到了,areainfoi我改成小写了,大家留意一下,这里不要大写,不允许。跟着操作你应该会是这样的结构

clipboard.png
然后我们要做的事情是把txt中的内容读取出来

InputStream inputStream = getResources().openRawResource(R.raw.areainfo); 
        String areaInfo = UtilTools.getStringFromInputStream(inputStream);
        
        JSONArray myJsonArray;
        try
        {
        myJsonArray = new JSONArray(areaInfo);
       
        for(int i=0 ; i < myJsonArray.length() ;i++)
        {
            //获取每一个JsonObject对象
            JSONObject provinceObject = myJsonArray.getJSONObject(i);
        
            //获取省区域的值
            String ProvinceName = provinceObject.getString("State");
            
            countries.add(ProvinceName);
//            Log.i("areaInfo", "省区域名称内容为:"+ProvinceName);
            //获取市区数组中对象的对象
            JSONArray cityArray = provinceObject.getJSONArray("Cities");
            
            List<String> tempCitiesForAdd = new ArrayList<String>();
            
            for(int j=0 ; j < cityArray.length() ;j++){
                //获取每一个JsonObject对象
                JSONObject cityObject = cityArray.getJSONObject(j);            
                //获取省区域的值
                String cityName = cityObject.getString("city");
                
                tempCitiesForAdd.add(cityName);
//                Log.i("areaInfo", "城市名称内容为:"+cityName);
            }
            
            cities.add(tempCitiesForAdd);

        }
    }catch (JSONException e)
    {
    }

我们可以这样
InputStream inputStream = getResources().openRawResource(R.raw.areainfo);从txt中将内容以输入流的方式读出来,然后我们再处理输入流,这里我也把UtilTools中的方法贴出来

/** 
* @author chenqiang
* @version 2015年11月6日 下午1:49:31
*/
public class UtilTools {
    
    //将输入流转化为字符串
    public static String getStringFromInputStream(InputStream inputStream) {
        InputStreamReader inputStreamReader = null;
        try {
            inputStreamReader = new InputStreamReader(inputStream, "utf-8");
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }
        BufferedReader reader = new BufferedReader(inputStreamReader);
        StringBuffer sb = new StringBuffer("");
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line);
                sb.append("\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

这样一来我们就从txt文件中得到了String信息,然后转化为JSONArray就可以for循环开始操作了,最终iOS的效果图为

clipboard.png
android的效果图为

clipboard.png

总结:

至此,大功告成!做别人不愿意做的事情,做别人做不到的事情,做别人想不到的事情,做好这三做,我相信会will be a better man Come on! 欢迎大家一起交流技术。


heartFollower
467 声望39 粉丝