Android数据存储

1:文件

 2:SharedPreference 

3:数据库


文件方面需要理解Java流的知识:


Java流可以理解为:虚拟的存储容器

所以在操作流的时候一定要先实例化流,再打开流,再建立流的读写工具。写入相关代码如下:

public void save(String inputText)
	{
		FileOutputStream out=null;
		BufferedWriter write=null;
		try{
			out=openFileOutput("data", Context.MODE_PRIVATE);
			write=new BufferedWriter(new OutputStreamWriter(out));
			write.write(inputText);
		}catch(IOException e)
		{
			e.printStackTrace();
		}finally {
				try {
					if(write!=null)
					{write.close();}
					
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			
		}
		
	}

读取相关代码如下:

	public String load() 
	{
		FileInputStream in=null;
		BufferedReader reader=null;
		StringBuilder content=new StringBuilder();
		try {
			in=openFileInput("data");
			reader=new BufferedReader(new InputStreamReader(in));
			String line="";
			while((line=reader.readLine())!=null)
			{
				content.append(line);
			}
		} 
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			if(reader!=null)
			{
				try {
					reader.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		}
		
		
		return content.toString();
		
	}

SharedPreferences:

三种方法实例化:

Context .getSharedPreferences()    

 Activity.getPreferences()  

PreferenceManager.getDefaultSharedPreferences()

存储代码如下:

SharedPreferences.Editor editor=getSharedPreferences("data", MODE_PRIVATE).edit();
		    editor.putString("name", "ZPY");
		    editor.putInt("age", 20);
		    editor.putBoolean("married", false);
		    editor.commit();
			
读取代码如下:

SharedPreferences pref=getSharedPreferences("data", MODE_PRIVATE);
				String name=pref.getString("name", "");
				int age=pref.getInt("age", 0);
				boolean married=pref.getBoolean("married", false);
				Log.d("AA", "name is"+name);
				Log.d("AA", "age is "+age);
				Log.d("AA", "married id "+married);

数据库存储:SQLite:

(1)继承SQLiteOpenHelper(),创建自己的类

(2)重写OnCreate()和OnUpgrade()方法

(3)实例化SQLiteOpenHelper

(4)通过getWritableDatabase()或者getReadableDatabase()得到数据库对象

(5)通过DB提供的insert,delete,update,query,进行增删改查。但是个人觉得直接使用SQL进行查询比较方便。相关的增删改运行SQL的方法为:db.exec(SQL);查询运行方法有所不同,是db.rawQuery(SQL);

package com.example.databasetest;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {


	private MyDatabaseHelper dbHelper;
	private Button createDB;
	private Button addData,updateData,deleteData,queryData;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		dbHelper=new MyDatabaseHelper(this, "BookStore.db", null, 2);
		createDB=(Button) findViewById(R.id.create_database);
		createDB.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dbHelper.getWritableDatabase();
				
			}
		});
		addData=(Button) findViewById(R.id.add_data);
		addData.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SQLiteDatabase db=dbHelper.getWritableDatabase();
				ContentValues values=new ContentValues();
				values.put("name", "The Da Vinci Code");
				values.put("author", "Dan Brown");
				values.put("pages", 499);
				values.put("price",16.96);
				db.insert("Book", null,values);
				values.clear();
				values.put("name", "AAA");
				values.put("author","ZPY");
				values.put("pages",123);
				values.put("price", 13.14);
				db.insert("Book", null, values);
				
			}
		});
		updateData=(Button) findViewById(R.id.update_data);
		updateData.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SQLiteDatabase db=dbHelper.getWritableDatabase();
				ContentValues values=new ContentValues();
				values.put("price", 52.13);
				db.update("Book", values, "name=?", new String[]{"AAA"});
				
			}
		});
		
		deleteData=(Button) findViewById(R.id.delete_data);
		deleteData.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SQLiteDatabase db=dbHelper.getWritableDatabase();
				db.delete("Book", "name=?", new String[]{"AAA"});
				
			}
		});
		queryData=(Button) findViewById(R.id.query_data);
		queryData.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SQLiteDatabase db=dbHelper.getWritableDatabase();
				Cursor cursor=db.query("Book", null, null, null, null, null, null);
				if(cursor.moveToFirst())
				{
					do{
						
						String name =cursor.getString(cursor.getColumnIndex("name"));
						String author=cursor.getString(cursor.getColumnIndex("author"));
					    int pages=cursor.getInt(cursor.getColumnIndex("pages"));
					    double price=cursor.getDouble(cursor.getColumnIndex("price"));
					    Log.d("DB",name+" "+author+" "+pages+" "+price);
					    
						
					}while(cursor.moveToNext());
					
				}
				cursor.close();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android数据存储是一种将数据存储在设备上的技术,以便应用程序可以使用它们,无论它们是否在运行时。这使得应用程序可以使用一些简单且安全的存储方法,而无需直接与设备存储硬件进行交互。Android提供了几种不同的数据存储选项,包括: 1. **Shared Preferences**:这是最基本的数据存储方式,它允许应用程序存储和检索键值对数据。这对于小型数据存储需求非常有用,因为它们是本地存储并且对其他应用程序不可见。 2. **Files**:应用程序可以使用文件系统来存储和检索数据。这可以包括文本文件、图像、音频和视频文件等。文件系统存储数据可以在应用程序关闭后保持持久性。 3. **SQLite**:SQLite是一个轻量级的关系型数据库,它可以在设备上作为嵌入式数据库使用。SQLite提供了对数据的结构化查询支持,因此更适合存储大量数据。 4. **Content Providers**:Content Providers允许应用程序之间共享数据。它们使得跨应用程序访问和共享数据成为可能,这对于构建大型应用程序的跨应用程序功能非常有用。 5. **外部存储(如SD卡)**:Android允许应用程序访问设备的外部存储(如SD卡)。这可以用于存储大文件或大型数据集,但需要注意的是,访问外部存储可能需要额外的权限。 在选择适当的存储选项时,需要考虑数据的类型、大小、持久性和安全性。例如,如果数据只需要在应用程序运行时可用,Shared Preferences可能是一个合适的选择。然而,如果需要存储大量结构化数据或大型文件,那么SQLite或外部存储可能更适合。 此外,对于敏感数据(如用户密码或个人信息),建议使用加密来保护这些数据。在Android中,可以使用AES或其他加密算法来实现这一点。 最后,记住在处理存储数据时遵循最佳实践,例如使用适当的错误处理和日志记录,以确保数据的安全性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值