RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
android数据操作,android的数据储存方式

Android数据存储之File总结

在使用File存储App数据时,我们需要了解Android系统的存储系统。Android的存储分为内部存储和外部存储。

十多年的黄陵网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整黄陵建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“黄陵网站设计”,“黄陵网站推广”以来,每个客户项目都认真落实执行。

由于Android系统的厂商比较多,对于外部存储目录的定义有所不同,可能在根目录下的mnt,sdcard和storage下。以storage为例,打开emulated/0目录,外部存储目录就出现了。虽然可以通过多种路径打开外部存储文件,但是最终他们的路径是相同的:

mnt:

storage:

sdcard:

外部存储目录下包含两大类:公有目录和私有目录

私有目录:

对比下来External有以下几点优点:

缺点:

内部存储与外部存储权限申请对比如下:

首先我们要获取外部存储目标文件的路径:

然后确定自己需要创建的文件名,结合上面的到的路径,创建一个File对象:

Android系统默认数据清理的路径是,内部存储目录中相应的cache文件夹中的文件和外部存储中相应的cache文件夹中的文件。

你的app的internal storage 目录是以你的app的包名作为标识存放在Android文件系统的特定目录下[data/data/com.example.xx]。 从技术上讲,如果你设置文件为可读的,那么其他app就可以读取你的internal文件。然而,其他app需要知道你的包名与文件名。若是你没有设置为可读或者可写,其他app是没有办法读写的。因此只要你使用MODE_PRIVATE ,那么这些文件就不可能被其他app所访问。

另外记住一点,内部存储在你的APP卸载的时候,会一块被删除,因此,我们可以在cache目录里面放置我们的图片缓存,而且cache与files的差别在于,如果手机的内部存储空间不够了,会自行选择cache目录进行删除,因此,不要把重要的文件放在cache文件里面,可以放置在files里面,因为这个文件只有在APP被卸载的时候才会被删除。还有要注意的一点是,如果应用程序是更新操作,内部存储不会被删除,区别于被用户手动卸载。

不管你是使用 getExternalStoragePublicDirectory() 来存储可以共享的文件,还是使用 getExternalFilesDir() 来储存那些对于你的app来说是私有的文件,有一点很重要,那就是你要使用那些类似DIRECTORY_PICTURES 的API的常量。那些目录类型参数可以确保那些文件被系统正确的对待。例如,那些以DIRECTORY_RINGTONES 类型保存的文件就会被系统的media scanner认为是ringtone而不是音乐。

在开发中,不建议往内部存储中写太多的数据,毕竟空间有限。外部存储在使用的时候最好能够将文件存放在私有目录下,这样有利于系统维护,也避免用户的反感。

彻底理解android中的内部存储与外部存储

Android存储挖坑记

缓存文件可以放在哪里?它们各自的特点是什么

如何进行Android数据库操作

Android数据库操作类实例

实体类:UserInfo.java

package my.db;

import java.io.Serializable;

import android.graphics.drawable.Drawable;

public class UserInfo implements Serializable {

public static final String ID = "_id";

public static final String USERID = "userId";

public static final String TOKEN = "token";

public static final String TOKENSECRET = "tokenSecret";

public static final String USERNAME = "userName";

public static final String USERICON = "userIcon";

private String id;

private String userId; // 用户id

private String token;

private String tokenSecret;

private String userName;

private Drawable userIcon;

//getter and setter省略

}

SqliteHelper类:

package my.db;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

public class SqliteHelper extends SQLiteOpenHelper{

//用来保存UserID、Access Token、Access Secret的表名

public static final String TB_NAME= "users";

public SqliteHelper(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version);

}

//创建表

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL( "CREATE TABLE IF NOT EXISTS "+

TB_NAME+ "("+

UserInfo. ID+ " integer primary key,"+

UserInfo. USERID+ " varchar,"+

UserInfo. TOKEN+ " varchar,"+

UserInfo. TOKENSECRET+ " varchar,"+

UserInfo. USERNAME+ " varchar,"+

UserInfo. USERICON+ " blob"+

")"

);

Log. e("Database" ,"onCreate" );

}

//更新表

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL( "DROP TABLE IF EXISTS " + TB_NAME );

onCreate(db);

Log. e("Database" ,"onUpgrade" );

}

//更新列

public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){

try{

db.execSQL( "ALTER TABLE " +

TB_NAME + " CHANGE " +

oldColumn + " "+ newColumn +

" " + typeColumn

);

} catch(Exception e){

e.printStackTrace();

}

}

}

CRUD类DataHelper:

package my.db;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.util.ArrayList;

import java.util.List;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.graphics.Bitmap;

import android.graphics.drawable.Drawable;

import android.util.Log;

public class DataHelper {

// 数据库名称

private static String DB_NAME = "weibo.db";

// 数据库版本

private static int DB_VERSION = 2;

private SQLiteDatabase db;

private SqliteHelper dbHelper;

public DataHelper(Context context) {

dbHelper = new SqliteHelper(context, DB_NAME, null, DB_VERSION );

db = dbHelper.getWritableDatabase();

}

public void Close() {

db.close();

dbHelper.close();

}

// 获取users表中的UserID、Access Token、Access Secret的记录

public ListUserInfo GetUserList(Boolean isSimple) {

ListUserInfo userList = new ArrayListUserInfo();

Cursor cursor = db.query(SqliteHelper. TB_NAME, null, null , null, null,

null, UserInfo. ID + " DESC");

cursor.moveToFirst();

while (!cursor.isAfterLast() (cursor.getString(1) != null )) {

UserInfo user = new UserInfo();

user.setId(cursor.getString(0));

user.setUserId(cursor.getString(1));

user.setToken(cursor.getString(2));

user.setTokenSecret(cursor.getString(3));

if (!isSimple) {

user.setUserName(cursor.getString(4));

ByteArrayInputStream stream = new ByteArrayInputStream(cursor.getBlob(5));

Drawable icon = Drawable.createFromStream(stream, "image");

user.setUserIcon(icon);

}

userList.add(user);

cursor.moveToNext();

}

cursor.close();

return userList;

}

// 判断users表中的是否包含某个UserID的记录

public Boolean HaveUserInfo(String UserId) {

Boolean b = false;

Cursor cursor = db.query(SqliteHelper. TB_NAME, null, UserInfo.USERID

+ "=?", new String[]{UserId}, null, null, null );

b = cursor.moveToFirst();

Log. e("HaveUserInfo", b.toString());

cursor.close();

return b;

}

// 更新users表的记录,根据UserId更新用户昵称和用户图标

public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERNAME, userName);

// BLOB类型

final ByteArrayOutputStream os = new ByteArrayOutputStream();

// 将Bitmap压缩成PNG编码,质量为100%存储

userIcon.compress(Bitmap.CompressFormat. PNG, 100, os);

// 构造SQLite的Content对象,这里也可以使用raw

values.put(UserInfo. USERICON, os.toByteArray());

int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "=?" , new String[]{UserId});

Log. e("UpdateUserInfo2", id + "");

return id;

}

// 更新users表的记录

public int UpdateUserInfo(UserInfo user) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERID, user.getUserId());

values.put(UserInfo. TOKEN, user.getToken());

values.put(UserInfo. TOKENSECRET, user.getTokenSecret());

int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "="

+ user.getUserId(), null);

Log. e("UpdateUserInfo", id + "");

return id;

}

// 添加users表的记录

public Long SaveUserInfo(UserInfo user) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERID, user.getUserId());

values.put(UserInfo. TOKEN, user.getToken());

values.put(UserInfo. TOKENSECRET, user.getTokenSecret());

Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);

Log. e("SaveUserInfo", uid + "");

return uid;

}

// 添加users表的记录

public Long SaveUserInfo(UserInfo user, byte[] icon) {

ContentValues values = new ContentValues();

values.put(UserInfo. USERID, user.getUserId());

values.put(UserInfo. USERNAME, user.getUserName());

values.put(UserInfo. TOKEN, user.getToken());

values.put(UserInfo. TOKENSECRET, user.getTokenSecret());

if(icon!= null){

values.put(UserInfo. USERICON, icon);

}

Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);

Log. e("SaveUserInfo", uid + "");

return uid;

}

// 删除users表的记录

public int DelUserInfo(String UserId) {

int id = db.delete(SqliteHelper. TB_NAME,

UserInfo. USERID + "=?", new String[]{UserId});

Log. e("DelUserInfo", id + "");

return id;

}

public static UserInfo getUserByName(String userName,ListUserInfo userList){

UserInfo userInfo = null;

int size = userList.size();

for( int i=0;isize;i++){

if(userName.equals(userList.get(i).getUserName())){

userInfo = userList.get(i);

break;

}

}

return userInfo;

}

}

安卓手机数据迁移到安卓手机?怎么操作

旧手机数据迁移到新手机只需要借助手机中的QQ同步助手软件,进入后,找到软件中的通讯录软件快速同步然后开启进行数据的迁移,系统会自动进行迁移,迁移完成后即可。具体步骤如下:

1、首先,找到手机中的QQ同步助手,然后点击登录。

2、登录后,会出现如下界面,点击立即开启,然后进入。

3、进入后,找到页面中的本机和云端合并去重选项,然后点击 。

4、这时候,系统就会开始进行数据的迁移了,迁移完成后会出现如下提示。

注意事项:

在进行实际的迁移 之前,最好进行杀毒和数据的清理,避免迁移不必要的数据,造成内存的占用。

请问怎样在Android系统手机上操作开启、关闭数据上网功能?

手机一键开启、关闭数据上网的操作方式(Android)如下:

1、Android系统手机:

(1)以MOTOXT800为例:

第一步:选择任一主屏,选择空白处点按住可看到主屏上弹出“添加到主屏幕”菜单;

第二步:点按选择“窗口小部件”;

第三步:点按选择“接入点控制”;

第四步:看到“接入点控制”工具条成功拖放在主屏空白桌面上;

第五步:您将在工具条上看到一个双向箭头的标志,点击箭头颜色变亮表示数据网络开启,点击箭头颜色变灰表示数据网络关闭。可以随心所欲的一键控制手机数据上网。

(2)以酷派N930为例:

第一步:找到手机屏幕顶端“通知”工具条;

第二步:将工具条向下拉;

第三步:看到有“启用网络”键;

第四步:点按“启用网络”即可开启网络,再点按“关闭网络”,即可关闭网络。


当前题目:android数据操作,android的数据储存方式
转载源于:http://cqwzjz.cn/article/hopoed.html