欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

关于Android开发数据存储的方式(一),android数据存储

来源: 开发者 投稿于  被查看 47753 次 评论:4

关于Android开发数据存储的方式(一),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开发 对于数据存储的问题

首先吧 我多说点,看你这个需求,我们先分两步》
1.网络访问
2.数据存储
一。android网络访问一般是模仿Http协议,简单来说就是HttpGet类与HttpPost类的运用,然后你把地址给它,http协议会返回响应,这个响应中包括返回码与返回内容,你索要的就在返回内容中。所以这里回答你的第一个问题,是文件还是数据?其实具体返回什么看服务器接口给你返回什么,一般企业是返回一个xml格式的字符串数据或Json格式的字符串数据,你要的试题内容就会包含在这个里面,还有一种可能,就是你最初访问的不是什么服务器接口,而是一个网络的文件地址,如果是这样的话,你要想获得它就需要通过JAVA的输入输出流技术来吧网络上的文件读写下来,那么它就是一个文件。
二。数据存储
android的数据存储共有5种,具体您可以去查一下,不过我这里带说一点,如果你想把数据封闭起来,那么你就应该创建一个数据库,然后把数据插入数据库中,如果是文件那么就需要转一下二进制数据再存进去,这样就起到了保密,如果你想放在手机的卡里,那么这里就要有第一个权限了,因为你是从无到有的过程,没有这个文件你总得创建吧,然后在用JAVA的输入输出流技术把文件数据写到文件中,存储完之后或写完之后整个操作就结束了。
纯手打,请珍惜啊,不懂可以再联系
 

android 数据存储的几种方式

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式;数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等;网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理。 对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络。但从开发者的角度来讲它可以分为以下五种方式: 1.SharedPreferences共享偏好 2.Internal Storage内部存储空间 3.External Storage外部存储空间 4.SQLite Database数据库 5.Internet网络 这几种方式各自有各自的优点和缺点,要根据不同的实际情况来选择,而无法给出统一的标准。下面就各种方式谈谈它们的优缺点,以及最合适的使用情况: 1.Shared Preferences共享偏好 SharedPreferences是用来存储一些Key/Value类似的成对的基本数据类型,注意,它只能存储基本数据类型,也即int, long, boolean, String, float。事实上它完全相当于一个HashMap,唯一不同的就是HashMap中的Value可以是任何对象,而SharedPreferences中的值只能存储基本数据类型(primitive types)。 对于它的使用方法,可以参考Android Developer Guide,这里不重复。 如此来看,最适合SharedPreferences的地方就是保存配置信息,因为很多配置信息都是Key/Value。事实上,在Android当中SharedPreferences使用最多的地方也是用来保存配置(Settings)信息,系统中的Settings中这样,各个应用中的Settings也是这样。并且,Android中为了方便的使用SharedPreferences保存配置信息,它来专门有PreferenceActivity用来封装。也就是说如果你想在应用程序中创建配置(Settings),你可以直接使用PreferenceActivity和一些相关的专门为Preference封装的组件,而不用再直接去创建,读取和保存SharedPreference,Framework中的这些组件会为你做这些事。 再谈谈一些使用SharedPreference时的技巧,它只能保存基本数据类型,但假如我想保存一个数组,怎么办?可以把数据进行处理,把它转化成一个String,取出的时候再还原就好了;再如,如想保存一个对象,怎么办,同样,可以把对象序列化成为字符序列,或转成String(Object.toString()),或是把它的HashCode(Object.hashCode())当成Value保存进去。 总之,SharedPreferences使用起来十分的方便,可以灵活应用,因为它简单方便,所以能用它就尽量不要用文件或是数据库。 1.Internal Storage内部存储空间 所谓的内部存储与外部存储,是指是否是手机内置。手机内置的存储空间,称为内部存储,它是手机一旦出厂就无法改变,它也是手机的硬件指标之一,通常来讲手机内置存储空间越大意味着手机价格会越贵(很多地方把它称为手机内存,但我们做软件的知道,这并不准确,内存是指手机运行时存储程序,数据......余下全文>>
 

相关频道:

用户评论