c#解析Josn(解析多个子集,数据,可解析无限级json)
首先引用 解析类库
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace BPMS.WEB.Common
- {
- public class CommonJsonModel : CommonJsonModelAnalyzer
- {
- private string rawjson;
- private bool isValue = false;
- private bool isModel = false;
- private bool isCollection = false;
- public CommonJsonModel(string rawjson)
- {
- this.rawjson = rawjson;
- if (string.IsNullOrEmpty(rawjson))
- throw new Exception("missing rawjson");
- rawjson = rawjson.Trim();
- if (rawjson.StartsWith("{"))
- {
- isModel = true;
- }
- else if (rawjson.StartsWith("["))
- {
- isCollection = true;
- }
- else
- {
- isValue = true;
- }
- }
- public string Rawjson
- {
- get { return rawjson; }
- }
- public bool IsValue()
- {
- return isValue;
- }
- public bool IsValue(string key)
- {
- if (!isModel)
- return false;
- if (string.IsNullOrEmpty(key))
- return false;
- foreach (string subjson in base._GetCollection(this.rawjson))
- {
- CommonJsonModel model = new CommonJsonModel(subjson);
- if (!model.IsValue())
- continue;
- if (model.Key == key)
- {
- CommonJsonModel submodel = new CommonJsonModel(model.Value);
- return submodel.IsValue();
- }
- }
- return false;
- }
- public bool IsModel()
- {
- return isModel;
- }
- public bool IsModel(string key)
- {
- if (!isModel)
- return false;
- if (string.IsNullOrEmpty(key))
- return false;
- foreach (string subjson in base._GetCollection(this.rawjson))
- {
- CommonJsonModel model = new CommonJsonModel(subjson);
- if (!model.IsValue())
- continue;
- if (model.Key == key)
- {
- CommonJsonModel submodel = new CommonJsonModel(model.Value);
- return submodel.IsModel();
- }
- }
- return false;
- }
- public bool IsCollection()
- {
- return isCollection;
- }
- public bool IsCollection(string key)
- {
- if (!isModel)
- return false;
- if (string.IsNullOrEmpty(key))
- return false;
- foreach (string subjson in base._GetCollection(this.rawjson))
- {
- CommonJsonModel model = new CommonJsonModel(subjson);
- if (!model.IsValue())
- continue;
- if (model.Key == key)
- {
- CommonJsonModel submodel = new CommonJsonModel(model.Value);
- return submodel.IsCollection();
- }
- }
- return false;
- }
- /// <summary>
- /// 当模型是对象,返回拥有的key
- /// </summary>
- /// <returns></returns>
- public List<string> GetKeys()
- {
- if (!isModel)
- return null;
- List<string> list = new List<string>();
- foreach (string subjson in base._GetCollection(this.rawjson))
- {
- string key = new CommonJsonModel(subjson).Key;
- if (!string.IsNullOrEmpty(key))
- list.Add(key);
- }
- return list;
- }
- /// <summary>
- /// 当模型是对象,key对应是值,则返回key对应的值
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- public string GetValue(string key)
- {
- if (!isModel)
- return null;
- if (string.IsNullOrEmpty(key))
- return null;
- foreach (string subjson in base._GetCollection(this.rawjson))
- {
- CommonJsonModel model = new CommonJsonModel(subjson);
- if (!model.IsValue())
- continue;
- if (model.Key != key)
- continue;
- if (model.Key == key)
- return model.Value;
- }
- return null;
- }
- /// <summary>
- /// 模型是对象,key对应是对象,返回key对应的对象
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- public CommonJsonModel GetModel(string key)
- {
- if (!isModel)
- return null;
- if (string.IsNullOrEmpty(key))
- return null;
- foreach (string subjson in base._GetCollection(this.rawjson))
- {
- CommonJsonModel model = new CommonJsonModel(subjson);
- if (!model.IsValue())
- continue;
- if (model.Key == key)
- {
- CommonJsonModel submodel = new CommonJsonModel(model.Value);
- if (!submodel.IsModel())
- return null;
- else
- return submodel;
- }
- }
- return null;
- }
- /// <summary>
- /// 模型是对象,key对应是集合,返回集合
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- public CommonJsonModel GetCollection(string key)
- {
- if (!isModel)
- return null;
- if (string.IsNullOrEmpty(key))
- return null;
- foreach (string subjson in base._GetCollection(this.rawjson))
- {
- CommonJsonModel model = new CommonJsonModel(subjson);
- if (!model.IsValue())
- continue;
- if (model.Key == key)
- {
- CommonJsonModel submodel = new CommonJsonModel(model.Value);
- if (!submodel.IsCollection())
- return null;
- else
- return submodel;
- }
- }
- return null;
- }
- /// <summary>
- /// 模型是集合,返回自身
- /// </summary>
- /// <returns></returns>
- public List<CommonJsonModel> GetCollection()
- {
- List<CommonJsonModel> list = new List<CommonJsonModel>();
- if (IsValue())
- return list;
- foreach (string subjson in base._GetCollection(rawjson))
- {
- list.Add(new CommonJsonModel(subjson));
- }
- return list;
- }
- /// <summary>
- /// 当模型是值对象,返回key
- /// </summary>
- private string Key
- {
- get
- {
- if (IsValue())
- return base._GetKey(rawjson);
- return null;
- }
- }
- /// <summary>
- /// 当模型是值对象,返回value
- /// </summary>
- private string Value
- {
- get
- {
- if (!IsValue())
- return null;
- return base._GetValue(rawjson);
- }
- }
- }
- }
解析类父类
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace BPMS.WEB.Common
- {
- public class CommonJsonModelAnalyzer
- {
- protected string _GetKey(string rawjson)
- {
- if (string.IsNullOrEmpty(rawjson))
- return rawjson;
- rawjson = rawjson.Trim();
- string[] jsons = rawjson.Split(new char[] { ':' });
- if (jsons.Length < )
- return rawjson;
- return jsons[].Replace("\"", "").Trim();
- }
- protected string _GetValue(string rawjson)
- {
- if (string.IsNullOrEmpty(rawjson))
- return rawjson;
- rawjson = rawjson.Trim();
- string[] jsons = rawjson.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
- if (jsons.Length < )
- return rawjson;
- StringBuilder builder = new StringBuilder();
- for (int i = ; i < jsons.Length; i++)
- {
- builder.Append(jsons[i]);
- builder.Append(":");
- }
- if (builder.Length > )
- builder.Remove(builder.Length - , );
- string value = builder.ToString();
- if (value.StartsWith("\""))
- value = value.Substring();
- if (value.EndsWith("\""))
- value = value.Substring(, value.Length - );
- return value;
- }
- protected List<string> _GetCollection(string rawjson)
- {
- //[{},{}]
- List<string> list = new List<string>();
- if (string.IsNullOrEmpty(rawjson))
- return list;
- rawjson = rawjson.Trim();
- StringBuilder builder = new StringBuilder();
- int nestlevel = -;
- int mnestlevel = -;
- for (int i = ; i < rawjson.Length; i++)
- {
- if (i == )
- continue;
- else if (i == rawjson.Length - )
- continue;
- char jsonchar = rawjson[i];
- if (jsonchar == '{')
- {
- nestlevel++;
- }
- if (jsonchar == '}')
- {
- nestlevel--;
- }
- if (jsonchar == '[')
- {
- mnestlevel++;
- }
- if (jsonchar == ']')
- {
- mnestlevel--;
- }
- if (jsonchar == ',' && nestlevel == - && mnestlevel == -)
- {
- list.Add(builder.ToString());
- builder = new StringBuilder();
- }
- else
- {
- builder.Append(jsonchar);
- }
- }
- if (builder.Length > )
- list.Add(builder.ToString());
- return list;
- }
- }
- }
示例
这里 注意点 要传json数组进来
[{
"键": [ { } ],
"键": [{ } ]
}]
要替换掉json内所有空格 Replace(" ","") ,Replace(Json, @"\r\n", "")
如果 json 键值对 传进来的值中 含有 ',' 隔开的值 则 需用 其他符号 替代 否则 取值时 取不全!
- public string ImportData(string Json)
- {
- StringBuilder sbStr = new StringBuilder();
- CommonJsonModel model = new CommonJsonModel(Regex.Replace(Json, @"\r\n", ""));
- List<CommonJsonModel> lst = model.GetCollection();
- foreach (CommonJsonModel item in lst)
- {
- #region
- string ImgList = item.GetValue("ImgList");
- CommonJsonModel modelImgList = new CommonJsonModel(Regex.Replace(ImgList, @"\r\n", ""));
- List<CommonJsonModel> lstImgList = modelImgList.GetCollection();
- List<string> sqlDelImgList = new List<string>();
- List<string> sqlInserImgList = new List<string>();
- foreach (CommonJsonModel itemImgList in lstImgList)
- {
- string ID = itemImgList.GetValue("ID");//
- if (ID != "0")
- {
- sqlDelImgList.Add(string.Format("DELETE FROM MR_Img WHERE AppID={0}",ID));
- }
- string Img = itemImgList.GetValue("Img");
- string Describe = itemImgList.GetValue("Describe");
- string sqlInsertImg = string.Format("INSERT INTO MR_Img([FilePathe],[Small_FilePathe],[Describe],[AppID]) VALUES('{0}','{1}','{2}',{3})", Img, Img, Describe, ID);
- sqlInserImgList.Add(sqlInsertImg);
- }
- int ictDelImg = DBHelper.ExecuteSqlTran(sqlDelImgList);
- //
- int ictImg = DBHelper.ExecuteSqlTran(sqlInserImgList);
- #endregion
- #region
- string ExamineItem = item.GetValue("ExamineItem");
- CommonJsonModel modelExamineItem = new CommonJsonModel(Regex.Replace(ExamineItem, @"\r\n", ""));
- List<CommonJsonModel> lstExamineItem = modelExamineItem.GetCollection();
- List<string> sqlDelExamineItemList = new List<string>();
- List<string> sqlInsExamineItemList = new List<string>();
- foreach (CommonJsonModel itemExamineItem in lstExamineItem)
- {
- string ID = itemExamineItem.GetValue("ID");
- if (ID != "0")
- {
- sqlDelExamineItemList.Add(string.Format("DELETE FROM MR_Check_Details where AppID={0}",ID));
- }
- string ExamineID = itemExamineItem.GetValue("ExamineID");
- string FloorList = itemExamineItem.GetValue("FloorList");
- string Danger = itemExamineItem.GetValue("Danger");
- string Imgs = itemExamineItem.GetValue("Imgs");
- string NewImgs = "";
- if (Imgs != "" || Imgs != "0")
- {
- string imgids = Imgs.Replace("&",",");
- string sqlQueryImgsID = string.Format("SELECT [ID] FROM MR_Img WHERE AppID IN({0})", imgids);
- DataTable dtImgsID = DBHelper.ExecuteDataTable(sqlQueryImgsID, CommandType.Text);
- if (dtImgsID != null && dtImgsID.Rows.Count > 0)
- {
- foreach (DataRow ImsIdRow in dtImgsID.Rows)
- {
- NewImgs = NewImgs + "," + ImsIdRow["ID"];
- }
- }
- }
- string Item_ID = itemExamineItem.GetValue("Item_ID");
- string Remarks = itemExamineItem.GetValue("Remarks");
- string Refuse = itemExamineItem.GetValue("Refuse");
- string RefuseName = itemExamineItem.GetValue("RefuseName");
- string sqlInsCheck_Details = string.Format("INSERT INTO MR_Check_Details ([Item_ID],[Danger],[Complete_Time],[Imgs],[Remarks],[Refuse],[RefuseName],[ExamID],[FloorList],[AppID]) VALUES({0},{1},getdate(),'{2}','{3}',{4},'{5}',{6},'{7}',{8})", Item_ID, Danger, NewImgs.Trim(','), Remarks, Refuse, RefuseName, ExamineID, FloorList, ID);
- sqlInsExamineItemList.Add(sqlInsCheck_Details);
- }
- int ictdelExamineItemList = DBHelper.ExecuteSqlTran(sqlDelExamineItemList);
- int ictExamineItemList = DBHelper.ExecuteSqlTran(sqlInsExamineItemList);
- #endregion
- #region
- string BuildList = item.GetValue("BuildList");
- CommonJsonModel modelBuildList = new CommonJsonModel(Regex.Replace(BuildList, @"\r\n", ""));
- List<CommonJsonModel> lstBuildList = modelBuildList.GetCollection();
- List<string> sqlUpBuidList = new List<string>();
- foreach (CommonJsonModel itemBuildList in lstBuildList)
- {
- string ID = itemBuildList.GetValue("ID");
- string Name = itemBuildList.GetValue("Name");
- string Contact = itemBuildList.GetValue("Contact");
- string Mobile = itemBuildList.GetValue("Mobile");
- string OwnerName = itemBuildList.GetValue("OwnerName");
- string OwnerMobile = itemBuildList.GetValue("OwnerMobile");
- string User_ID = itemBuildList.GetValue("User_ID");
- string Doorplate = itemBuildList.GetValue("Doorplate");
- string Address = itemBuildList.GetValue("Address");
- string FloorNum = itemBuildList.GetValue("FloorNum");
- string UpBuild = string.Format("UPDATE MR_Building SET [Name] ='{0}',[Contact] = '{1}',[Mobile] = '{2}',[OwnerName] = '{3}',[OwnerMobile] = '{4}',[User_ID] = {5},[Doorplate] = '{6}',[Address] ='{7}',[FloorNum] ={8} WHERE ID={9}", Name, Contact, Mobile, OwnerName, OwnerMobile, User_ID, Doorplate, Address, FloorNum, ID);
- sqlUpBuidList.Add(UpBuild);
- }
- int ictUpBuidList = DBHelper.ExecuteSqlTran(sqlUpBuidList);
- #endregion
- #region
- int ictBuildExamine = 0;
- string BuildExamine = item.GetValue("BuildExamine");
- CommonJsonModel modelBuildExamine = new CommonJsonModel(Regex.Replace(BuildExamine, @"\r\n", ""));
- List<CommonJsonModel> lstBuildExamine = modelBuildExamine.GetCollection();
- foreach (CommonJsonModel itemBuildExamine in lstBuildExamine)
- {
- string ID = itemBuildExamine.GetValue("ID");
- string BID = itemBuildExamine.GetValue("BID");
- string NewDanger = "";
- string Danger = itemBuildExamine.GetValue("Danger");
- if (Danger != "" || Danger != "0")
- {
- string DangerIds = Danger.Replace("&", ",");
- string sqlQBuidDanger = string.Format("SELECT ID FROM MR_Check_Details where AppID in ({0})", DangerIds);
- DataTable dtBuildDanger = DBHelper.ExecuteDataTable(sqlQBuidDanger, CommandType.Text);
- if (dtBuildDanger != null && dtBuildDanger.Rows.Count > 0)
- {
- foreach (DataRow BuildDangerRow in dtBuildDanger.Rows)
- {
- NewDanger = NewDanger + "," + BuildDangerRow["ID"];
- }
- }
- }
- string RemarkType = itemBuildExamine.GetValue("RemarkType");
- string Remark = itemBuildExamine.GetValue("Remark");
- string Remark2 = itemBuildExamine.GetValue("Remark2");
- string Complete_Time = itemBuildExamine.GetValue("Complete_Time");
- string UserID = itemBuildExamine.GetValue("UserID");
- ictBuildExamine += LxAddCheckBuild(BID, NewDanger.Trim(','), Remark, Remark2, Complete_Time, UserID);
- }
- #endregion
- #region
- string StreetList = item.GetValue("StreetList");
- CommonJsonModel modelStreetList = new CommonJsonModel(Regex.Replace(StreetList, @"\r\n", ""));
- List<CommonJsonModel> lstStreetList = modelStreetList.GetCollection();
- List<string> SqlUpSteetList = new List<string>();
- foreach (CommonJsonModel itemStreetList in lstStreetList)
- {
- string ID = itemStreetList.GetValue("ID");
- string Name = itemStreetList.GetValue("Name");
- string Address = itemStreetList.GetValue("Address");
- string Type = itemStreetList.GetValue("Type");
- string Business = itemStreetList.GetValue("Business");
- string Layer = itemStreetList.GetValue("Layer");
- string Acreage = itemStreetList.GetValue("Acreage");
- string Has_Business = itemStreetList.GetValue("Has_Business");
- string Owner_Name = itemStreetList.GetValue("Owner_Name");
- string Phone = itemStreetList.GetValue("Phone");
- string Run_Name = itemStreetList.GetValue("Run_Name");
- string Run_Phone = itemStreetList.GetValue("Run_Phone");
- string Place_x = itemStreetList.GetValue("Place_x");
- string place_y = itemStreetList.GetValue("place_y");
- string UserID = itemStreetList.GetValue("UserID");
- string Extinguisher_Num = itemStreetList.GetValue("Extinguisher_Num");
- string Emergency_Num = itemStreetList.GetValue("Emergency_Num");
- string Alertor_Num = itemStreetList.GetValue("Alertor_Num");
- string UpSteet = string.Format("UPDATE MR_Street SET [Name] = '{0}',[Type] = {1},[Address] = '{2}',[Business] = '{3}' ,[Layer]='{4}',[Acreage] ={5},[Has_Business] ='{6}',[Owner_Name] = '{7}',[Phone] ='{8}',[Run_Name] = '{9}',[Run_Phone] = '{10}',[Place_x] = {11},[place_y] = '{12}',[UserID] = {13} WHERE Id={14}", Name, Type, Address, Business, Layer, Acreage, Has_Business, Owner_Name, Phone, Run_Name, Run_Phone, Place_x, place_y, UserID,ID);
- SqlUpSteetList.Add(UpSteet);
- string UpSteetDeal = string.Format("UPDATE MR_Street_Detail SET [Extinguisher_Num] = {0},[Emergency_Num] = {1} ,[Alertor_Num] ={2} WHERE SID={3}",Extinguisher_Num,Emergency_Num,Alertor_Num,ID);
- SqlUpSteetList.Add(UpSteetDeal);
- }
- int ictUpSteetList=DBHelper.ExecuteSqlTran(SqlUpSteetList);
- #endregion
- #region
- string StreetExamine = item.GetValue("StreetExamine");
- CommonJsonModel modelStreetExamine = new CommonJsonModel(Regex.Replace(StreetExamine, @"\r\n", ""));
- List<CommonJsonModel> lstStreetExamine = modelStreetExamine.GetCollection();
- int ictStreetExamine = 0;
- foreach (CommonJsonModel itemStreetExaminee in lstStreetExamine)
- {
- // string ID = itemStreetExaminee.GetValue("ID");
- string SID = itemStreetExaminee.GetValue("SID");
- string NewDanger = "";
- string Danger = itemStreetExaminee.GetValue("Danger");
- if (Danger != "" || Danger != "0")
- {
- string DangerIds = Danger.Replace("&", ",");
- string sqlQStreetDanger = string.Format("SELECT ID FROM MR_Check_Details where AppID in ({0})", DangerIds);
- DataTable dtStreetDanger = DBHelper.ExecuteDataTable(sqlQStreetDanger, CommandType.Text);
- if (dtStreetDanger != null && dtStreetDanger.Rows.Count > 0)
- {
- foreach (DataRow StreetDangerRow in dtStreetDanger.Rows)
- {
- NewDanger = NewDanger + "," + StreetDangerRow["ID"];
- }
- }
- }
- string RemarkType = itemStreetExaminee.GetValue("RemarkType");
- string Remark = itemStreetExaminee.GetValue("Remark");
- string Remark2 = itemStreetExaminee.GetValue("Remark2");
- string Complete_Time = itemStreetExaminee.GetValue("Complete_Time");
- string UserID = itemStreetExaminee.GetValue("UserID");
- ictStreetExamine+= LxAddCheckNew(SID, NewDanger.Trim(','), RemarkType, Remark, Remark2, Complete_Time, UserID);
- }
- #endregion
- }
- return "";
- }
c#解析Josn(解析多个子集,数据,可解析无限级json)的更多相关文章
- java后台对json格式数据的解析
Json 和 Jsonlib 的使用 什么是 Json JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式 ...
- UI:数据的解析XML与JSON
XML 和 JSON 语言 本篇博客来自互联网参考 XML 和 JSON 的互相转化 有属性的转化为对象,无属性的转化为字符串 节点的顺序性不可逆,XML有顺序,JSON 无顺序 XML 和 J ...
- JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决
JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...
- NPOI操作EXCEL(三)——反射机制进行excel表格数据的解析
我们先来回忆回忆上篇文章讲到的通过xml配置文件实现excel批量模板解析的整体思路: 1.对每个excel模板制定xml配置规则集,实现xml配置文件的解析服务 2.为每个excel模板制定DTO, ...
- XML数据的解析
XML数据的解析 相比于JSON数据解析而言,XML数据解析可能会让更多的童鞋感觉到吃力,对我来说,同样认为JSON数据好像让人感觉比较友好,不过对于程序开发者来说,无非就是这两种数据解析占比较大的部 ...
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
原因分析 首先我们来看下Spring mvc 中文件上传的配置 <bean id="multipartResolver" class="org.springfram ...
- 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...
- jq 解析josn字符串
1. var obj = jQuery.parseJSON("${ruleModel.rules}"); 2. var obj = eval("("+" ...
- json和xml数据的解析
一 json数据 1一条json就像一个对象,也想像OC中的数组,且内嵌了很多键值对字典 {"name" : "jack", "age" : ...
- android基础---->JSON数据的解析
上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...
随机推荐
- xml--通过SAX解析XML
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用SAX分析器对XML文档进行 ...
- JVM之字节码——Class文件格式
如同讲汇编必先讲计算机组成原理,在开始字节码之前,我们先了解一下JVM的主要构成. 在JVM的内部,主要由如下几个部分构成: 1.数据区 方法区:存放类定义信息.字节码.常量等数据,在Sun HotS ...
- 似曾相识的 RecyclerView
一.常用方法 RecyclerView 与 ListView.GridView 类似,都是可以显示同一种类型 View 的集合的控件. 首先看看最简单的用法,四步走: ①接入 build.gradle ...
- 海量Office文档搜索
知识管理系统Data Solution研发日记之十 海量Office文档搜索 经过前面两篇文章的介绍,<分享制作精良的知识管理系统 博客备份程序 Site Rebuild>和<分 ...
- JavaScript要点 (三) 保留关键字
在 JavaScript 中,一些标识符是保留关键字,不能用作变量名或函数名. JavaScript 标准 所有的现代浏览器完全支持 ECMAScript 3(ES3,JavaScript 的第三版, ...
- UITableViewcell autolayout下动态高度
项目中最经常使用的一个UI就是UITableView了.iOS7.8进一步优化了复用机制,用起来相当爽.配合Autolayout,适配工作减轻了非常多. 曾经做适配工作都是在heightForRow里 ...
- SpecialFolder
private void button1_Click(object sender, EventArgs e) { Environment.Spe ...
- css3 字体旋转
<style> #mycon { font-weight: bold; font-size: 150px; transform: rotateX(10deg); -webkit-trans ...
- 文件I/O(不带缓冲)之I/O的效率
程序清单3-3中的程序使用read和write函数复制文件.关于该程序应注意下列各点: 它从标准输入读,写至标准输出,这就假定在执行本程序之前,这些标准输入.输出已由shell安排好.确实,所有常用的 ...
- Android利用Looper在子线程中改变UI
MainActivity如下: package cn.testlooper; import android.app.Activity; import android.os.Bundle; import ...