关于Android开发数据存储的方式(一)
关于Android开发数据存储方式(一)
在厦门做Android开发也有两个月了,快情人节了。我还在弄代码。
在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下:
整体的来讲。数据存储方式有三种:一个是文件,一个是数据库,还有一个则是网络。
当中文件和数据库可能用的稍多一些。文件用起来较为方便。程序能够自定义格式;数据库用起稍烦锁一些,但它有它的长处。比方在海量数据时性能优越。有查询功能,能够加密,能够加锁。能够跨应用。跨平台等等。网络,则用于比較重要的事情,比方科研,勘探,航空等实时採集到的数据须要立即通过网络传输到数据处理中心进行存储并进行处理。
对于Android平台来讲。它的存储方式也不外乎这几种,按方式整体来分,也是文件,数据库和网络。但从开发人员的角度来讲它能够分为下面五种方式:
1.SharedPreferences共享偏好
2.Internal Storage内部存储空间
3.External Storage外部存储空间
4.SQLite Database数据库
5.Internet网络
这几种方式各自有各自的长处和缺点,要依据不同的实际情况来选择,而无法给出统一的标准。以下就各种方式谈谈它们的优缺点,以及最合适的使用情况:
以下依据自己在开发中。分别做一下測试,先做一下简单的APP。帮组自己理解Android的数据存储:
(一)文件
事实上这个APP 也是在网上下载的,效果如图:
实现的功能:将网络上的一张图片下载到自己的收集里面。
如今就贴一下代码吧:1.MainActivity.java
package
com.test.learning;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements Runnable {
private EditText urlText;
private Button button;
private Handler handler; // 声明一个Handler对象
private boolean flag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
urlText = (EditText) findViewById(R.id.editText_url);
button = (Button) findViewById(R.id.button_go);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread t = new Thread(CopyOfMainActivity.this);
t.start(); // 开启线程
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (flag) {
Toast.makeText(CopyOfMainActivity.this, "文件下载完毕!",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(CopyOfMainActivity.this, "文件下载失败!",
Toast.LENGTH_SHORT).show();
}
super.handleMessage(msg);
}
};
}
});
}
@Override
public void run() {
try {
String sourceUrl = urlText.getText().toString();
URL url = new URL(sourceUrl);
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
InputStream is = urlConn.getInputStream(); // 获取输入流对象
if (is != null) {
String expandName = sourceUrl.substring(
sourceUrl.lastIndexOf(".") + 1, sourceUrl.length())
.toLowerCase();
String fileName = sourceUrl.substring(
sourceUrl.lastIndexOf("/") + 1,
sourceUrl.lastIndexOf("."));
File file = new File("/sdcard/pictures/" + fileName + "."
+ expandName);
FileOutputStream fos = new FileOutputStream(file);
byte buf[] = new byte[128];
while (true) {
int numread = is.read(buf);
if (numread <= 0) {
break;
} else {
fos.write(buf, 0, numread);
}
}
}
is.close(); // 关闭输入流对象
urlConn.disconnect();
flag = true;
} catch (MalformedURLException e) {
e.printStackTrace();
flag = false;
} catch (IOException e) {
e.printStackTrace();
flag = false;
}
Message m = handler.obtainMessage(); // 获取一个Message
handler.sendMessage(m); // 发送消息
}
}
2.main.xml代码
<?xml
version="1.0" encoding="utf-8"?
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="@drawable/background"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:layout_weight="1"
android:id="@+id/editText_url"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:text="@string/defaultvalue"
android:lines="1" />
<Button
android:id="@+id/button_go"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/go" />
</LinearLayout>
3.string.xml代码
<?xml
version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">14.5</string>
<string name="go">下载</string>
<string name="defaultvalue">http://p8.qhimg.com/dm/620_270_/t011685779b50979038.jpg</string>
</resources>
执行就能够得到如上的图。
关于Android开发数据存储的方式(一)的更多相关文章
- Android开发数据存储之ContentProvider详解
转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可 ...
- Android开发--数据存储之File文件存储
转载来自:http://blog.csdn.net/ahuier/article/details/10364757,并进行扩充 引言:Android开发中的数据存储方式 Android提供了5种方式存 ...
- android 开发-数据存储之文件存储
android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时 ...
- android 开发-数据存储之共享参数
android提供5中数据存储方式 数据存储之共享参数 内部存储 扩展存储 数据库存储 网络存储 而共享存储提供一种可以让用户存储保存一些持久化键值对在文件中,以供其他应用对这些共享参数进行调用.共 ...
- Android开发--数据存储之数据库操作
简介: SQLite 的介绍: SQLite数据库属于文本型的数据库,它是以文本的形式来保存的.Android提供了对 SQLite 数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据 ...
- IOS开发数据存储篇—IOS中的几种数据存储方式
IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09 421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...
- Android实现数据存储技术
转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...
- Android中数据存储(四)——ContentProvider存储数据
目录(?)[+] 当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方 ...
- Android中数据存储(一)
国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM ...
随机推荐
- 【Leetcode 3】Longest Substring Without Repeating Characters0
Description: Given a string, find the length of the longest substring without repeating characters. ...
- js-消息对话框
最近在某技术网站学习一些js(JavaScript)的课程,将笔记分享一下 消息对话框1. **alert **消息对话框,输出内容,可以是字符串或变量,与document.write 相似 va ...
- mysql GTID主从复制(主库在线,添加新丛库)
要求: 1. 主库上线,主库不停止服务的前提下做主从复制 2. 新添加一个丛库 操作: 1. 在主库导出数据(主库正常运行): 2. 将 ...
- CSS——padding
padding是盒子内容与边框的距离. padding:10px;/*上下左右都是10px*/ padding:10px 20px;/*上下是10px 左右是20px*/ padding:10px 2 ...
- c++ 以二进制和以文本方式读写文件的区别
在c++项目开发中,时常涉及到文件读写操作.因此在这里先简单梳理和回顾一下文本模式和二进制模式在进行文件读写上的区别. 1.linux平台下文本文件和二进制文件的读写 在linux平台下进行文件读写时 ...
- 六时车主 App 隐私政策
六时车主 App 隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义 ...
- Nginx 重新加载日志配置
最近在写一个nginx日志的切割脚本,切割完后,发现可以不重启服务,而直接重新加载日志配置文件的命令 [ kill -USR1 $nginx.pid ],但是不知道 -USR1这个参数是什么意 ...
- JNI数组操作
在Java中数组分为两种: 1.基本类型数组 2.对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用) 一个能通用于两种不同类型数组的函数: GetArrayLength(ja ...
- CAD直接打印,不出现打印对话框(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::Mx_Print 直接打印,不出现打印对话框,详细说明如下: 参数 说明 double ptLBx 打印的范围左下角x double ...
- Java中“==”、“compareTo()”和“equals()”的区别
在比较两个对象或者数据大小的时候,经常会用到==.compareTo()和equals(),尤其是在接入了Comparable接口后重写compareTo方法等场景,所以我们来理一下这三个的区别. 1 ...