android 保存json文件怎样将数据以json格式保存在手机文件中?

Android解析json
Android读写json
Android json格式
Android json数据
Android json方法
Android json对象
Android json实例
相关电子书最近更新2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
本帖子已过去太久远了,不再提供回复功能。1.JSON概念:
&&&&&& 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。&
&&&&&& JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。比XML更轻量级,Json使用起来比较轻便和简单。JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。
2.环境配置
&&&&&&& 里有一个名为Gson的类库,可以用它来解析Json数据,并且,Adroid 3.0平台里其实也就是把这一部分直接整合进Android里了。我们要解析Json数据,直接去网站上下载个jar包,导入到工程里,就可以解析Json数据了。
3.JSON应用
& &(1).JSON是一种轻量级的数据交换格式 & &(2).JSON基于两种数据结构:Object和Array。其中Object是&名称/值&对的集合。
(3)在Android中包含四个与JSON相关的类和一个Exceptions:
&&&&&&& a.JSONObject
&&&&&&& 这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。
&&&&&& b.JSONArray
&&&&&& 它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号&,&分隔(例如:[value1,value2,value3]
&&&&&&& c.JSONStringer
& & & & 这个类可以帮助快速和便捷的创建JSONtext。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。例如:
String myString = new JSONStringer().object()
.key("name")
.value("小猪")
.endObject()
.toString();
myString ={"name" : "小猪"}
&&&&&&& d.JSONTokener
&&&&&&&&& 这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。
&&&&&&& e.JSONException
&(4)JSON格式举例
a.Object实例:
"Image": {
"Height": 600,
"View from 15th Floor",
"Thumbnail": {
"/image/",
"Height": 125,
"IDs": [116, 943, 234, 38793]
b.Array实例:
"precision": "zip",
"Latitude":
"Longitude": -122.3959,
"Address":
"SAN FRANCISCO",
"Country":
"precision": "zip",
"Latitude":
37.371991,
"Longitude": -122.026020,
"Address":
"SUNNYVALE",
"Country":
4.JSON解析案例 & & &(1)解析Object之一:
String jsonString ={"url":"/qianxudetianxia"};解析方法:JSONObject demoJson = new JSONObject(jsonString);String url = demoJson.getString("url");
& & (2)解析Object之二:
String jsonString ={"name":"android"," version":"Beta1.0"};解析方法:JSONObject demoJson = new JSONObject(jsonString);String name = demoJson.getString("name");String version = demoJson.getString("version");System.out.println("name:"+name+",version:"+version);
& (3).解析Array之一:
String jsonString ={"number":[1,2,3]};
解析方法:
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("number");
for(int i=0; i&numberList.length(); i++){
//因为数组中的类型为int,所以为getInt,其他getString,getLong同用
System.out.println(numberList.getInt(i));
(4).解析Array之二:
String jsonString ={"number":[[1],[2],[3]]};解析方法://嵌套数组遍历JSONObject demoJson = new JSONObject(jsonString);JSONArray numberList = demoJson.getJSONArray("number");for(int i=0; i&numberList.length(); i++){
//获取数组中的数组
System.out.println(numberList.getJSONArray(i).getInt(0));}
(5).解析Object和Array:
String jsonString ={"mobile":[{"name":"android"},{"name":"iphone"}]};解析方法:JSONObject demoJson = new JSONObject(jsonString);JSONArray numberList = demoJson.getJSONArray("mobile");for(int i=0; i&numberList.length(); i++){
System.out.println(numberList.getJSONObject(i).getString("name"));}
(6).使用optType:
上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。如果使用optType,找不到节点,则返回null或者默认值。
//无url节点,抛出异常String url = demoJson.getString("url");//无url节点,返回空,如果为基本类型,则返回默认值String url = demoJson.optString("url");
(7).UTF-8的BOM头导致解析JSON异常的问题 & & & 到json文件保存为utf-8的时候,在windows平台下,会产生bom头"EF BB EF"字节在文本的最前面(需要用十六进制工具打开才能看的到)。 & & & 有两种解决方法: & & & a.使用UltraEdit打开json文件, 另存为的时候,选择格式UTF-8,无BOM头,如果还不行,在用记事本打开,另存为UTF-8下,多试几次就可以了。 & & & b.使用代码处理,截取json主体内容:
String jsonString = getJsonString();jsonString =jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);
&--------------------------------------------------------------------
PS: 欢迎关注公众号"Devin说",会不定期更新Java相关技术知识。
--------------------------------------------------------------------
阅读(...) 评论()Android中数据存储方式一:文件形式
总结在中,一共有数据存储的5种方式。今天做一个笔记的整理。关于以文件形式如何来保存数据。
1.在activity_main.xml设计好布局
2.在MainActivity.class获取用户输入的文件名和文件信息,保存文件。
public class MainActivity extends Activity {
private Button saveB
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveBtn = (Button)findViewById(R.id.fileSaveBtn);
saveBtn.setOnClickListener(new saveFileListener());
* 如果这个类不需要被继承,加个final关键字来终结它。
private final class saveFileListener implements OnClickListener{
public void onClick(View v) {
EditText fileNameText = (EditText)findViewById(R.id.inputName);
EditText fileContentText = (EditText)findViewById(R.id.inputContext);
String fileName = fileNameText.getText().toString();
String fileContent = fileContentText.getText().toString();
FileService fileService
= new FileService(getApplicationContext());
//保存到手机的内存上
fileService.saveFilePrivate(fileName,fileContent);
} catch (Throwable e) {
Toast.makeText(MainActivity.this, R.string.fail, Toast.LENGTH_LONG).show();
e.printStackTrace();
3.在业务层,FileSerivice处理如何保存文件内容。
public class FileService {
//生成构造器
public FileService(Context context){
this.context =
* 保存文件信息
* @param fileName 文件名
* @param fileContent 文件内容
* @throws Throwable
public void saveFilePrivate(String fileName,String fileContent) throws Exception{
//采用输出流对象,输出我们所需要的数据。
//指出需要导出的位置openFileOutput(只接受文件名称,不接受文件路径,
//用于指定文件的操作模式,行为【追加方式】,【覆盖形式】
//文件有一个访问权限的控制,针对拥有者,针对其他用户的访问权限
//私有操作模式:创建出来文件的只能被本应用访问,其他应用无法访问该文件。
其次私有模式创建出来的文件会覆盖原有的文件内容。
// 默认保存在,当前应用包所在的下的files文件夹下。
FileOutputStream outputStream = context.openFileOutput(lmfcast.txt,Context.MODE_PRIVATE);
//追加方式
//FileOutputStream outputStream = context.openFileOutput(lmfcast.txt,Context.MODE_APPEND);
write(fileContent, outputStream);
private void write(String fileContent, FileOutputStream outputStream)
throws IOException {
outputStream.write(fileContent.getBytes());
outputStream.close();
4.运行截图:
学习总结:
1.文件保存方式,是采用java的IO流技术。
2.文件的访问模式,分为private和append。
3.文件操作行为分为:private,apend,read,write,read+write。西西软件园多重安全检测下载网站、值得信赖的软件下载站!
→ Android从服务器端获取数据的几种方法
类型:源码相关大小:23.6M语言:中文 评分:9.1
在android中有时候我们不需要用到本机的SQLite提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有一:基于Http协议获取数据方法。二:基于SAOP协议获取数据方法,三:忘了-------那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据。那么,接下来我们便开始这一路程:首先:编写服务器端方法,我这里采用的MVC框架是Struts2,目的很单纯,就是为了以后做个完整的商业项目,技术配备为:android+SSH。当然,篇幅有限,我这里就直接用Strtus2而已。服务器端:新建WebProject ,选择Java ee 5.0.为了给项目添加Struts2的支持,我们必须导入Struts2的一些类库,如下即可(有些jar包是不必的,但是我们后来扩展可能是要使用到的,就先弄进去):1: xwork-core-2.2.1.1.jar 2: struts2-core-2.2.1.1.jar3: commons-logging-1.0.4.jar4: freemarker-2.3.16.jar5: ognl-3.0.jar6: javassist-3.7.ga.jar7:commons-ileupload.jar&8:commons-io.jar9:json-lib-2.1-jdk15.jar& 处理JSON格式数据要使用到 10:struts2-json-plugin-2.2.1.1.jar&&& 基于struts2的json插件以上的jar包,需要放在WebRoot/WEB-INF/lib目录下然后在web.xml文件中敲下:View Code&?xml version=&1.0& encoding=&UTF-8&?&&web-app version=&2.5& xmlns=&/xml/ns/javaee& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& xsi:schemaLocation=&/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd&&&!-- 定义Struts2的核心控制器:FilterDispatcher --&&filter&&!-- 定义核心Filter的名称 --&&filter-name&struts2&/filter-name&&!-- 定义Filter的实现类 --&&filter-class&org.apache.struts2.dispatcher.FilterDispatcher&/filter-class&&/filter&&filter-mapping&&filter-name&struts2&/filter-name&&url-pattern&/*&/url-pattern&&/filter-mapping&&welcome-file-list&&welcome-file&index.jsp&/welcome-file&&/welcome-file-list&&/web-app&然后编写struts.xml文件,并放在WebRoot/WEB-INF/lib目录下:如下代码:View Code&?xml version=&1.0& encoding=&UTF-8&?&&!DOCTYPE struts PUBLIC&-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&&http://struts.apache.org/dtds/struts-2.0.dtd&&&struts&&!-- setting encoding,DynamicMethod,language &constant name=&struts.custom.i18n.resources& value=&messageResource&&&/constant&--&&constant name=&struts.i18n.encoding& value=&UTF-8&&&/constant&&constant name=&struts.enable.DynamicMethodInvocation& value=&true&&&/constant&&!-- add package here extends=&struts-default&--&&package name=&dongzi& extends=&json-default&& &!--需要将struts-default改为json-default--&&!-- setting action --&&action name=&login& class=&com.dongzi.action.loginAction& method=&login&&&result type=&json&&&/result& &!--返回值类型设置为json,不设置返回页面--& &/action& &/package& &/struts&配置好后,我们再根据&action&标签内容来编写action。方法为method对应的login,类名为loginAction,注意:包继承为:json-default ,输出结果类型为json如下:View Codepublic class loginAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {/*** */private static final long serialVersionUID = 1L;HttpServletRHttpServletRpublic void setServletRequest(HttpServletRequest request) {this.request=}public void setServletResponse(HttpServletResponse response) {this.response=}public void login(){ try {//HttpServletRequest request =ServletActionContext.getRequest();// HttpServletResponse response=ServletActionContext.getResponse();this.response.setContentType(&text/charset=utf-8&);this.response.setCharacterEncoding(&UTF-8&);if(this.request.getParameter(&username&).equals(&123456&)){this.response.getWriter().write(&真的很奇怪,日本人!&);}else if(this.request.getParameter(&username&).equals(&zhd&)){this.response.getWriter().write(&没有错,我就是东子哥!&);}else{this.response.getWriter().write(&我就是东子哥!&);}//将要返回的实体对象进行json处理 // JSONObject json=JSONObject.fromObject(this.getUsername()); //输出格式如:{&id&:1, &username&:&zhangsan&, &pwd&:&123&} // System.out.println(json); // this.response.getWriter().write(json.toString());/**JSONObject json=new JSONObject(); json.put(&login&, &login&);response.setContentType(&text/charset=utf-8&);System.out.println(json);byte[] jsonBytes = json.toString().getBytes(&utf-8&);response.setContentLength(jsonBytes.length);response.getOutputStream().write(jsonBytes);**//**JSONObject json=new JSONObject(); json.put(&login&, &login&);byte[] jsonBytes = json.toString().getBytes(&utf-8&);response.setContentType(&text/charset=utf-8&);response.setContentLength(jsonBytes.length);response.getOutputStream().write(jsonBytes);response.getOutputStream().flush();response.getOutputStream().close(); **/ } catch (Exception e) { e.printStackTrace();}//}}&运行查看下:http://localhost:8080/PDAServer/login.action?username=123456& 当然你可以输入其他参数的URL运行成功。客户端:这里需要注意的是模拟器把自己当成了localhost,以及127.0.0.1了,因此如果基于本地的web项目测试的话,必须修改IP为:10.0.2.2public class MainActivity extends Activity {/** Called when the activity is first created. *///模拟器自己把自己当成localhost了,服务器应该为10.0.2.2private static String url=&http://10.0.2.2:8080/PDAServer/login.action&;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);getPDAServerData(url); }/*** 请求服务* @param url*/private void getPDAServerData(String url){url+=&?username=123456&;HttpClient client=new DefaultHttpClient();HttpP try {request = new HttpPost(new URI(url));HttpResponse response=client.execute(request);//判断请求是否成功if(response.getStatusLine().getStatusCode()==200){HttpEntity entity=response.getEntity();if(entity!=null){String out=EntityUtils.toString(entity);new AlertDialog.Builder(this).setMessage(out).create().show();}}}catch (URISyntaxException e) {e.printStackTrace();}catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }&运行结果如下:成功了吧:当然读者可以根据这个思路扩展下应用,比如:struts2+hibernate+spring+json。数据方面可以用json,也可以使用xml。android已经提供了JSON的API,struts2中也可以使用JSON插件.自己扩展吧。
07-1906-0605-1905-0404-2004-1403-1603-1003-1003-10
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载

我要回帖

更多关于 android 保存json文件 的文章

 

随机推荐