前言:
虽然做研发谁都想周边的配合都很到位,只要做好自己的事情就好,但是现实往往不会如此的一番如意的轻松, such as
昨日我在修复一个android APP
的地区选择功能时候,发现这个地区的选项不是服务端提供,iOS
客户端是从一个文件中加载出来的,那么问题来了,我所能找到的文件只有iOS
工程中的ProvincesAndCities.plist
,这个文件是iOS
存数据的文件,android
要想读是非常困难的,废话不多说,路在脚下,还是要前行,让我们想办法解决它!
正文:
iOS方面操作
我先简短的介绍一下解决的思路,.plist
文件里面放的可能是数组也可能是字典,我们如果直接用NSLog
方法打印数组,字典的时候,我们会得到的
就是这样的编码格式的内容,这显然是不能用在android
的,所以我们的思路是要将.plist
中的内容打印为我们能处理的内容,那就是JsonString
了。
所以iOS
这边的做法,如图片所示,先将plist
文件放入,然后读取出内部的数组信息,然后用SBJson
转化为NSString
,然后在NSLog
打印出来,运行程序我们会得到
很好我们已经进行一半了,然后在控制台复制这些数据到一个文本文件中如
至此iOS
这边的处理完成了,然后是txt
文件跟android
之间的处理手法,让我们继续看下去
android方面操作
首先现在android
工程中的res
文件夹中新建raw
文件夹,然后将我们得到的areainfo.txt
,放入到这个raw
文件夹中,细心的你可能注意到了,areainfo
的i
我改成小写了,大家留意一下,这里不要大写,不允许。跟着操作你应该会是这样的结构
然后我们要做的事情是把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
的效果图为
android
的效果图为
总结:
至此,大功告成!做别人不愿意做的事情,做别人做不到的事情,做别人想不到的事情,做好这三做,我相信会will be a better man Come on!
欢迎大家一起交流技术。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。