android mysql储存动态数据_Android中数据的保存

本文详细介绍了Android中保存数据的多种方法,包括File、sharedPreferences、数据库SQLite和公共SD卡上的文件存储。重点讲解了如何利用File保存数据至/data/data/包名/目录,使用sharedPreferences保存XML数据,以及如何处理6.0及以上版本的SD卡读写权限问题。同时,文章提及了使用MySQL数据库进行数据保存的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概述

在Android中有以下几种保存数据方式:

1). 使用sharedPreference去保存:只有应用程序自己可以访问

2). 保存在应用程序私有的文件夹下:只有应用程序自己可以访问

3). 使用File形式保存在file/cache目录下

4). 保存到公共的sd卡上:其他的应用程序也可以访问

5). 使用数据库去保存(MySQL)

其中1.2.3的共性都是保存在当前应用的目录下的私有数据

2. 方法一:File方式保存

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);try{

File f= new File("/data/data/com.example.aplex.testforgit/test.txt");

BufferedWriter writer= new BufferedWriter(newFileWriter(f)) ;

writer.write("hahahehe");

writer.close();

}catch(IOException e){

e.printStackTrace();

}

}

f7d3139f208892bae5e7c2be36afa4bf.png

071324413b1e1eb77336b67cb61a1239.png

3. 方法二:File方式保存(data/cache目录下)

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

try{

//1. 保存在应用的cache中

{

File f = new File(getCacheDir(),"cache.txt");

BufferedWriter writer = new BufferedWriter(newFileWriter(f)) ;

writer.write("hahahehe");

writer.close();

}

}catch(IOException e){

e.printStackTrace();

}

//2. 保存在应用的file中

try{

File f = new File(getFilesDir(),"file.txt");

BufferedWriter writer = new BufferedWriter(newFileWriter(f)) ;

writer.write("hahahehe");

writer.close();

} catch(IOException e) {

e.printStackTrace();

}

}

0718a623730ead2f57925b59eaea8350.png

注意:清除数据会把data目录下改应用的所有数据都清除掉,而清除缓存则只会清除cache目录下的数据

70f5e31e5fdf603a50791135e2e388ff.png

9e40996da857d8e9e4ed5dc26a6b9a70.png

4. 方法三:使用sharedPreference去保存

Xml 文件可以用来保存数据

注意: 使用sharedPreferences保存数据时,  生成的xml文件是

在  /data/data/包名/shared_prefs 目录下.

packagecom.example.aplex_new1.myapplication;importandroid.content.SharedPreferences;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;public class MainActivity extendsAppCompatActivity {

Button bt1;

EditText accountView;

EditText pwdView;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

bt1=findViewById(R.id.bt);

accountView=findViewById(R.id.ed);

pwdView=findViewById(R.id.ed2);//获取到mydata.xml对象,没有则会创建一个

SharedPreferences sp = getSharedPreferences("mydata", 0);//拿到编辑器

SharedPreferences.Editor ed =sp.edit();//获取出mydata.xml中键值为account的数据

String account = sp.getString("account", "");//获取出mydata.xml中键值为pwd的数据

String pwd = sp.getString("pwd","");//显示出来

accountView.setText(account);

pwdView.setText(pwd);

bt1.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View view) {

SharedPreferences sp= getSharedPreferences("mydata", 0);

SharedPreferences.Editor ed=sp.edit();

String account=accountView.getText().toString();

String pwd=pwdView.getText().toString();//放入数据中

ed.putString("account", account);

ed.putString("pwd", pwd);//提交

ed.apply();

}

});

}

}

现象:第一次点击应用

账号密码都为空

b14dfa585c7b85fc4742103be7364e3f.png

在输入完账号密码后,退出,再次点击,则会回显出来

25c10dad9f2531bb5a89ac65992493d3.png

因为数据已经保存进了XML文件中去了

54307deb58bebfbd6e60fbe62877a591.png

bb90c0a8005c1e3ee2162ac06b168f47.png

b1e7dcbab07d368d9d0429ef62c497c8.png

打开mydata.xml

1234567

1234567

4. 方法四:保存到公共的sd卡上:

1. 概念和代码

AndroidManifest.xml

android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme">

SDFileHelper.java

public classSDFileHelper {

String TAG= "SDFileHelper";privateContext context;publicSDFileHelper() {

}publicSDFileHelper(Context context) {

super();this.context =context;

}//往SD卡写入文件的方法

public voidsavaFileToSD(String filename, String filecontent) throws Exception {//如果手机已插入sd卡,且app具有读写sd卡的权限

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

filename= Environment.getExternalStorageDirectory().getCanonicalPath() + "/" +filename;

Log.d(TAG,"文件名:"+filename);//这里就不要用openFileOutput了,那个是往手机内存中写数据的

FileOutputStream output = newFileOutputStream(filename);

output.write(filecontent.getBytes());//将String字符串以字节流的形式写入到输出流中

output.close();//关闭输出流

} else Toast.makeText(context, "SD卡不存在或者不可读写", Toast.LENGTH_SHORT).show();

}//读取SD卡中文件的方法//定义读取文件的方法:

publicString readFromSD(String filename) throws IOException {

StringBuilder sb= new StringBuilder("");if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

filename= Environment.getExternalStorageDirectory().getCanonicalPath() + "/" +filename;//打开文件输入流

FileInputStream input = newFileInputStream(filename);byte[] temp = new byte[1024];int len = 0;//读取文件内容:

while ((len = input.read(temp)) > 0) {

sb.append(new String(temp, 0, len));

}//关闭输入流

input.close();

}returnsb.toString();

}

}

MainActivity.java

public classMainActivity extends AppCompatActivity implements View.OnClickListener{privateEditText editname;privateEditText editdetail;privateButton btnsave;privateButton btnclean;privateButton btnread;privateContext mContext;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mContext=getApplicationContext();

bindViews();}private voidbindViews() {

editname=(EditText) findViewById(R.id.edittitle);

editdetail=(EditText) findViewById(R.id.editdetail);

btnsave=(Button) findViewById(R.id.btnsave);

btnclean=(Button) findViewById(R.id.btnclean);

btnread=(Button) findViewById(R.id.btnread);

btnsave.setOnClickListener(this);

btnclean.setOnClickListener(this);

btnread.setOnClickListener(this);

}

@Overridepublic voidonClick(View v) {switch(v.getId()){caseR.id.btnclean:

editdetail.setText("");

editname.setText("");break;caseR.id.btnsave:

String filename=editname.getText().toString();

String filedetail=editdetail.getText().toString();

SDFileHelper sdHelper= newSDFileHelper(mContext);try{

sdHelper.savaFileToSD(filename, filedetail);

Toast.makeText(getApplicationContext(),"数据写入成功", Toast.LENGTH_SHORT).show();

}catch(Exception e){

e.printStackTrace();

Toast.makeText(getApplicationContext(),"数据写入失败", Toast.LENGTH_SHORT).show();

}break;caseR.id.btnread:

String detail= "";

SDFileHelper sdHelper2= newSDFileHelper(mContext);try{

String filename2=editname.getText().toString();

detail=sdHelper2.readFromSD(filename2);

}catch(IOException e){e.printStackTrace();}

Toast.makeText(getApplicationContext(), detail, Toast.LENGTH_SHORT).show();break;

}

}

}

3326c25339a6286c0d82f4f6accace9a.png

2. 6.0上SD卡的权限和动态申请权限的问题(重点!!)

Android6.0之后系统对权限的管理更加严格了,不但要在AndroidManifest中添加,还要在应用运行的时候动态申请。下面是动态申请SD卡读写的权限

1. 在AndroidManifest中添加SD卡读写的权限

2. 申请权限

申请权限有两种方式:

1). 手动打开权限:

Settings-->Apps-->找到所需要的应用-->Permissions-->打开权限

2). 在程序中动态申请权限(重点):

private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE ={"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE"};public static voidverifyStoragePermissions(Activity activity) {try{//检测是否有写的权限

int permission =ActivityCompat.checkSelfPermission(activity,"android.permission.WRITE_EXTERNAL_STORAGE");if (permission !=PackageManager.PERMISSION_GRANTED) {//没有写的权限,去申请写的权限,会弹出对话框

ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);

}

}catch(Exception e) {

e.printStackTrace();

}

}

5. 方法五:使用数据库(MySQL)去保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值