Android五种方式存储数据:
1) 使用SharedPreferences存储数据
2) 文件存储数据
3) SQLite数据库存储数据
4) 使用ContentProvider存储数据
5) 网络存储数据
一、使用SharedPreferences存储数据
SharedPreferences存储方式,它是Android提供的用来存储一些简单配置信息的一种机制,其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入。
SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下
写入:SharedPreferences userInfo = getSharedPreferences("user_info", 0);
userInfo.edit().putString("userName", "zhangsan").commit();
userName.setText(userInfo.getString("userName", ""));
二、文件存储
文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。
try {
FileOutputStream outStream = openFileOutput("file.txt", Context.MODE_WORLD_WRITEABLE);
outStream.write(info.getBytes());
outStream.flush();
outStream.close();
Builder dialog = new AlertDialog.Builder(FileActivity.this);
dialog.setIcon(R.drawable.icon);
dialog.setTitle("信息查看");
FileInputStream inStream = openFileInput("file.txt");
StringBuffer buffer = new StringBuffer();
int t;
while(!((t=inStream.read())==-1)){
buffer.append((char)t);
}
dialog.setMessage(buffer.toString());
dialog.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(FileActivity.this,NetActivity.class);
startActivity(intent);
}
});
dialog.show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
三、SQlite存储(下篇会做详细介绍)
四、使用ContentProvider存储数据
在Android平台上文件都是应用程序私有的,也就是应用程序只能访问自己的数据(数据库存储,文件存储,网络存储),如果是属于其它应用程序的文件,一般式无法直接访问的。如果需要共享数据,那么我们就需要content provider,简单的说就是用content provider把数据包装后供授权的Application访问。
ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库” ,外界可以通过这一套标准及统一的接口和程序里的数据打交道,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”. 每行有个带唯一值的数字字段,名为_ID,可用于对表中指定记录的定位 。
Android提供了ContentResolver,外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据。 可以读取程序的数据,也可以删除程序的数据。
android中数据共享① android本身提供的 例如 contacts(联系人)信息获取
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
startManagingCursor(cursor);
ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,
new String[]{ContactsContract.Contacts.DISPLAY_NAME}, new int[]{android.R.id.text1});
setListAdapter(adapter);
② 我们自己 实现ContentProvider
1、定义一个CONTENT_URI常量,用于访问ContentProvider;
2、定义一个类,继承ContentProvider
3、实现其函数insert();update();delete();query();getType();onCreate();
4、不要忘记在AndroidManifest.xml中声明 如:
<provider android:name="MyContentProvider"
android:authorities="com.android.demo.datastorage.MyContentProvider"/>
五、网络存储
介绍android网络存储前先介绍下
android网络编程:
①、使用标准的java jdk中 java.net.* ( URL openConnection() 获取HttpURLConnection)
②、使用Apache httpClient发送http请求
String URL = editText.getText().toString();
HttpPost request = new HttpPost(URL);
ArrayList< BasicNameValuePair> listParams = new ArrayList< BasicNameValuePair>();
listParams.add(new BasicNameValuePair("name","zhangsan")); //添加参数
listParams.add(new BasicNameValuePair("pswd","123"));
try {
request.setEntity(new UrlEncodedFormEntity(listParams, HTTP.UTF_8));//设置参数编码
HttpResponse response = new DefaultHttpClient().execute(request); //发送请求并获取反馈
// 解析返回的内容
if(response.getStatusLine().getStatusCode() == 200){
String rs = EntityUtils.toString(response.getEntity());
textView.setText("返回信息:"+rs);
}else{
textView.setText("Error。。。。");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
③、android.net.*实现
Android通过网络来实现数据的存储和获取,通过网络上提供给的存储空间来上传数据(存储)和下载数据(获取)我们存储在网络空间中的数据信息 。
记得声明权限 <!-- 访问 internet 权限 --> <uses-permission android:name="android.permission.INTERNET"/>
说漏的地方希望大家及时补充,不胜感激。。。