文档章节

Android存储技术简介

jacky_123
 jacky_123
发布于 2015/01/25 16:36
字数 1134
阅读 34
收藏 0

SharePreferences

实现SharedPreferences存储的步骤如下:

一、根据Context获取SharedPreferences对象。

二、利用edit()方法获取Editor对象。

三、通过Editor对象存储key-value键值对数据。

四、通过commit()方法提交数据。

下面介个例子都是保存用户用户名,及登陆密码的例子。

SharedPreferences实例:

/* 保存数据 */
 private void toSave() {
  String name = mEditText1.getText().toString().trim();
  String pswd = mEditText2.getText().toString().trim();
  /* 获得活动的Preferences对象 */
  SharedPreferences setting = getPreferences(Activity.MODE_PRIVATE);
  /* 保存时要取得编辑对象 */
  SharedPreferences.Editor editor = setting.edit();
  /* 赋予键-值 */
  editor.putString("name", name);
  editor.putString("pswd", pswd);
  /* 别忘记提交保存 */
  editor.commit();
 }
/* 页面显示 */
 private void toShow() {
  Map<String, String> map = getDate();
  mEditText1.setText(map.get("name"));
  mEditText2.setText(map.get("pswd"));
  String text = "用户名:" + map.get("name") + "\n";
  text += "密码:" + map.get("pswd") + "\n";
  mTextView.setText(text);
 }
 
/* 获取数据 */

 private Map<String, String> getDate() {

  Map<String, String> map = new HashMap<String, String>();

  SharedPreferences setting = getPreferences(Activity.MODE_PRIVATE);

  map.put("name", setting.getString("name", ""));

  map.put("pswd", setting.getString("pswd", ""));

  return map;

 }

File存储

openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。

/* 保存数据 */
 private void toSave() {
  String name = mEditText1.getText().toString().trim();
  String pswd = mEditText2.getText().toString().trim();
  Properties properties = new Properties();
  properties.put("name", name);
  properties.put("pswd", pswd);
  try {
   /* 写入文件 */
   FileOutputStream stream = this.openFileOutput("info.cfg",
     Context.MODE_PRIVATE);
   properties.store(stream, "");
  } catch (FileNotFoundException e) {
  } catch (IOException e) {
  }
 }
 /* 页面显示 */
 private void toShow() {
  Map<String, String> map = getDate();
  mEditText1.setText(map.get("name"));
  mEditText2.setText(map.get("pswd"));
  String text = "用户名:" + map.get("name") + "\n";
  text += "密码:" + map.get("pswd") + "\n";
  mTextView.setText(text);
 }
 /* 获取数据 */
 private Map<String, String> getDate() {
  Map<String, String> map = new HashMap<String, String>();
  String name = "";
  String pswd = "";
  Properties properties = new Properties();
  try {
   /* 打开文件 */
   FileInputStream stream = this.openFileInput("info.cfg");
   /* 读取文件内容 */
   properties.load(stream);
   name = properties.get("name").toString();
   pswd = properties.get("pswd").toString();
  } catch (FileNotFoundException e) {
  } catch (IOException e) {
  }
  map.put("name", name);
  map.put("pswd", pswd);
  return map;
 }

NetWork存储数据:包含对json的解析

public class NetworkActivity extends Activity implements OnClickListener {
 private EditText mEditText1, mEditText2;
 private Button returnhome, submit;
 private TextView mTextView, explain;
 private String mResult = "";
 private JSONArray info = new JSONArray();
 private Handler handler = null;
 /* 定义需要获取的内容来源地址 */
 private static final String SERVER_URL = "http://115.29.188.74:83/temp_dir/chongqtest.txt";
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.share_preferences);
  initControl();
  // 创建属于主线程的handler
  handler = new Handler();
  // 启动线程执行下载任务
  new Thread(downloadRun).start();
 }
 /* 初始化 */
 private void initControl() {
  returnhome = (Button) this.findViewById(R.id.returnhome);
  returnhome.setOnClickListener(this);
  mEditText1 = (EditText) this.findViewById(R.id.username);
  mEditText1.setVisibility(View.GONE);
  mEditText2 = (EditText) this.findViewById(R.id.password);
  mEditText2.setVisibility(View.GONE);
  mTextView = (TextView) this.findViewById(R.id.toshow);
  mTextView.setVisibility(View.GONE);
  explain = (TextView) this.findViewById(R.id.explain);
  submit = (Button) this.findViewById(R.id.submit);
  submit.setOnClickListener(this);
  submit.setVisibility(View.GONE);
 }
 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  switch (v.getId()) {
  case R.id.returnhome:
   super.finish();
   break;
  case R.id.submit:
   break;
  }
 }
 Runnable downloadRun = new Runnable() {
  @Override
  public void run() {
   // TODO Auto-generated method stub
   /* 根据内容来源地址创建一个HTTP请求 */
   HttpPost request = new HttpPost(SERVER_URL);
   /* 添加一个变量 */
   List<NameValuePair> params = new ArrayList<NameValuePair>();
   /* 设置一个地区名称,添加必须的参数 */
   params.add(new BasicNameValuePair("PlaceName", "NewYork"));
   try {
    // 设置参数的编码
    request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
    // 发送请求并获取反馈
    HttpResponse httpResponse = new DefaultHttpClient()
      .execute(request);
    // 解析返回的内容
    if (httpResponse.getStatusLine().getStatusCode() != 404) {
     String result = EntityUtils.toString(httpResponse
       .getEntity());
     JSONObject jsonObja = new JSONObject(result)
       .getJSONObject("response");
     JSONArray jsonObjb = jsonObja.getJSONArray("list");
     for (int k = 0; k < jsonObjb.length(); k++) {
      JSONObject jsonObj = (JSONObject) jsonObjb.opt(k);
      JSONArray jsonArr = jsonObj.getJSONArray("items");
      for (int i = 0; i < jsonArr.length(); i++) {
       JSONObject jsonO = ((JSONObject) jsonArr.opt(i));
       mResult += "ID:" + jsonO.getString("id").toString()
         + "\n";
       mResult += "name:" + jsonO.getString("name") + "\n";
       mResult += "title:" + jsonO.getString("title")
         + "\n";
       mResult += "short_content:"
         + jsonO.getString("short_content") + "\n";
       handler.post(runnableUi);
       // Thread.sleep(1000);   模拟了界面一点点的更新
      }
     }
     Log.d("TAG", result);
     Log.d("TAG", info.toString());
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 };
 // 构建Runnable对象,在runnable中更新界面
 Runnable runnableUi = new Runnable() {
  @Override
  public void run() {
   // 更新界面
   explain.setText("the Content is:" + mResult);
  }
 };
}

Sqlite实例

cur.getCount() 得到的是查询到的记录的条数,指行数

cur.getColumnCount() 得到的是列数,指的是表机构的列数,与记录无关。

/* 查询数据 */

private List<HashMap<String, Object>> getData(String where) {
  HashMap<String, Object> hashMap;
  Cursor cur = mSQLiteDataBase.rawQuery(where, null);
  if (cur != null) {
   if (cur.moveToFirst()) {
    do {
     int id = cur.getInt(cur.getColumnIndex("_id"));
     String name = cur.getString(cur.getColumnIndex("name"));
     String pswd = cur.getString(cur.getColumnIndex("pswd"));
     hashMap = new HashMap<String, Object>();
     hashMap.put("recordid", String.valueOf(id));
     hashMap.put("name", name);
     hashMap.put("pswd", pswd);
     mList.add(hashMap);
    } while (cur.moveToNext());
   }
  }
  return mList;
 }

/* 打开数据库,创建表 */

 private void openDataBase() {
  mSQLiteDataBase = this.openOrCreateDatabase("examples.db",
    MODE_PRIVATE, null);
  String CREATE_TABLE = "create table if not exists table1 (_id INTEGER PRIMARY KEY,name TEXT,pswd TEXT);";
  mSQLiteDataBase.execSQL(CREATE_TABLE);
 }

 /* 添加一条数据 */

 private void addData() {
  String name = mEditText1.getText().toString().trim();
  String pswd = mEditText2.getText().toString().trim();
  /* 添加方式一 */
  ContentValues cv = new ContentValues();
  cv.put("name", name);
  cv.put("pswd", pswd);
  mSQLiteDataBase.insert("table1", null, cv);
  /* 添加方式二 */
  String INSERT_DATA = "INSERT INTO table1 (name,pswd) values ('" + name
    + "2','" + pswd + "2')";
  mSQLiteDataBase.execSQL(INSERT_DATA);
  /* 动态更新页面显示 */
  // mList = getData("SELECT * FROM table1 where name='" + name
  // + "' or name ='" + name + "2'");
  
  /* 第二种方式 */
  mList.clear();
  mList = getData("SELECT * FROM table1");
  adapter.notifyDataSetChanged();
 }

 /* 删除一条数据 */

private void delData(int recordid) {


  String DELETE_DATA = "DELETE FROM table1 WHERE _id=" + recordid + ";";


  mSQLiteDataBase.execSQL(DELETE_DATA);


 }

/* 动态删除页面记录 */
    

mList.remove(position);

    adapter.notifyDataSetChanged();

© 著作权归作者所有

jacky_123
粉丝 3
博文 55
码字总数 26297
作品 0
南通
程序员
私信 提问
《Android/OPhone 开发完全讲义》样章和目录下载

《Android/OPhone 开发完全讲义》一书预计在6-15左右出版,现提供3个样章(第1、8和14章)试读,欢迎提出宝贵意见。 内 容简介 本书近500页,共25章,分为5篇,超过200个完整的例子、超过2万...

小编辑
2010/06/02
1K
1
深圳、中山地区工作求一枚

个人简介 3年实践软件开发经历。掌握.net(vb.net/C#)、php、asp开发技术,会使用MSSQL、MYSQL、ACCESSS、ORACLE,函数、存储过程、触发器、事务等数据库设计都很熟练。曾自学android开发。为...

totovlen
2014/02/18
310
3
开源中国2010年图书赠送活动《Android应用开发揭秘》

活动内容: 参与活动者请从现在开始,到2010年3月1日这段时间内,对Oschina独家发布的《Android应用开发揭秘》一书内容章节进行客观点评,及大家可以就该技术的趋势和定位提出一些看法,只要...

红薯
2010/01/25
5.9K
203
这是一份全面 & 详细的Android多线程知识总结指南

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 今天,我将献上一份全面 & 详细的Android多线程学习指南,希望你们喜欢。 目录 1. 多线程基础知识 在了解Android多线程实现...

Carson_Ho
06/26
0
0
JVM:图文解析 Java内存模型 & 分区

前言 了解中的对象、变量等存放的内存区域十分重要 本文将全面讲解虚拟机中的内存模型 & 分区,希望你们会喜欢 在接下来的日子,我会推出一系列讲解的文章,具体如下;感兴趣可持续关注Carso...

Carson_Ho
2018/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部