Android数据存储

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();

读取:SharedPreferences userInfo = getSharedPreferences("user_info", 0);

    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"/>


说漏的地方希望大家及时补充,不胜感激。。。微笑




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值