Android基础之本地广播及文件存储和SharedPreference存储

来源:互联网 发布:ubuntu u盘系统 编辑:程序博客网 时间:2024/05/01 01:33

昨晚有没睡好,原因还是没有找到,今天晚上的心情不是很美丽,原因还是怪自己多嘴,以后一定少说,一定少说,一定少说!!!

不过也有令人高兴的事情,我的粉丝部长终于寻得一人,放下过去,祝福他们,但是自己什么时候才能放下呢,谁知道的,时间或

许会告诉我答案吧!好了,话不多说,开始说学习!

今天主要是学习了本地广播的发送,完成了广播学习阶段的实践,即实现强制下线功能,还进行安卓的数据持久存储技术。

一、本地广播的发送

本地广播是为了解决广播的安全性问题而引入的,本地广播使能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本

应用程序发出的广播,这样安全性问题便迎刃而解了。其实现主要是借助于LocalBroadcastManager来对广播进行管理,并提供了

发送广播和接收广播的方法。

public class MainActivity extends ActionBarActivity {
private IntentFilter intentFilter;
private LocalReceiver localReceiver;
private LocalBroadcastManager localBroadcastManager;

private NetworkChangeReceiver networkChangeRecive;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        //获取一个本地广播的实例
        localBroadcastManager=LocalBroadcastManager.getInstance(this);
        Button button=(Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
public void onClick(View v) 

//发送本地广播的实例
Intent intent=new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
   localBroadcastManager.sendBroadcast(intent);

}
});
        
        //动态注册本地广播
        intentFilter =new IntentFilter();
        intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
        localReceiver=new LocalReceiver();
        localBroadcastManager.registerReceiver(localReceiver, intentFilter);

        }

        public void onDestroy()
{
super.onDestroy();
unregisterReceiver(networkChangeRecive);
}

class LocalReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Received local broadcast", Toast.LENGTH_SHORT).show();
}


}
    }

注意:本地广播无法通过静态注册来接收。

二、广播最佳实践------实现强制下线功能

耀完成该这个项目,首先要建立两个活动,即登录活动和发送强制下线通知的活动

并且要实现两个活动之间的切换,有登陆活动作为主活动,当用户密码与用户名输入正确之后

则将活动切换,发送广播后,杀死所有活动,并重新启动登陆活动。

注意:活动管理器的使用

         在广播中活动切换的注意事项和弹出与系统相关的对话框的处理。

三、数据的永久存储技术

数据的永久存储方式可以分为三种:

1.文件存储:适用于存储一些简单的文本数据和二进制数据

2.SharedPreference存储:使用键值对来对文件进行存储,支持多种不同数据类型的存储

3.SQLite数据库存储:适用于较复杂的数据结构,大量数据的存储

1>文件存储的实现主要是依靠Context类提供的openFileOutput()方法,并借助Java数据流的知识就可以将数据存入指定的文件夹中。

public void save(String inputText)
{
FileOutputStream out=null;
BufferedWriter writer=null;
//其中第一个参数是文件名,第二个参数是文件的操作模式
try {
out=openFileOutput("data", Context.MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
try {
writer.write(inputText);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(writer!=null)
{
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

2>文件中数据的读取:借助于openFileInput再借助java数据流就可以读出数据了。

public String load()
{
FileInputStream in=null;
BufferedReader reader=null;
StringBuffer content=new StringBuffer();
try {
in=openFileInput("data");
reader=new BufferedReader(new InputStreamReader(in));
String line="";
try {
while((line=reader.readLine())!=null)
{
content.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException 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();
}

切记:最后不要忘记关闭数据流

3>SharedPreferences存储

若想要使用该方法进行存储,则首先应该获取SharedPreferences对象,最常使用的是Context类的getSharedPreferences()方法

可以分三步实现文件的存储

1.调用SharedPrefernces对象的edit()方法来获取一个SharedPreferences.Editor的对象。

2.向获取的对象中添加数据。

3.调用commit()将数据进行提交。

saveData.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data",
MODE_PRIVATE).edit();
editor.putString("name", "xxx");
editor.putInt("age", 21);
editor.putBoolean("married", false);
editor.commit();
}

4>SharedPrefernces读取数据

使用SharedPrefernces对象提供的get方法

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("MainActivity", "name is "+name);
Log.d("MainActivity", "age is  "+age);
Log.d("MainActivity", "married is "+married);

由于数据库存储技术还未全部实践完毕,所以相关内容明天整理。

下面说一下今天在运行程序时出现的问题:

1.无法打开手机的data文件查看文件存储和SharedPreferences存储生成的文件,解决方法:

将手机进行root,root之后下载RE管理器,打开后修改长按data以及data之下的文件或者文件夹选择修改权限即可,

将所有的权限都打勾,再去DDMS下就可以打开了

2.无法查看SQLite生成的数据库文件,主要是由于手机没有sqlite文件,这样的话可以将文件导入到本地,如果权限不够,参照1

来解决,在下载一个pc版本的sqlite文件查看器就可以,推荐SQlite Expert这样就可以解决问题了,还不用去配置环境之类的,简单粗暴

今天到此结束,还是希望今晚不要失眠,明天 天气转暖,晨练差不多得提上日程了,晚安,好梦,明天加油!

寄语:你说的话比你沉默要有意义,聊天也要这样,总而言之一句话,少说多做!!!

1 0