activity销毁时如何保存用户信息?

菜鸟刘 发布于 2016/05/25 17:40
阅读 612
收藏 0

<无详细内容>

加载中
0
_君剑
_君剑
系统回收回收还是手动结束
0
东向利
东向利

Activity里有一对个事件,回调可以实现。

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        //保存数据
        super.onRestoreInstanceState(savedInstanceState);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        //显示数据
        super.onSaveInstanceState(outState);
    }



菜鸟刘
菜鸟刘
怎么写啊,我没摸索出来,麻烦大神了
0
东向利
东向利

http://my.oschina.net/keeponmoving/blog/60943

你看一下这个文章,写的很详细,很到位。希望可以帮到你。

0
让往事随风
让往事随风
1.若是向数据库中插入数据,保存持久化数据的操作时应放在onPause()中. 
protected void onPause(){….. }
2.若保存UI控件的状态, 成员变量的值等应放在onSaveInstanceState()中
protected void onSaveInstanceState(Bundle outState) {.... }
菜鸟刘
菜鸟刘
这个方法我知道,关键是如何调用,在什么地方写?我写的一个activity中有好几个fragment,其中一个fragment有需要用户填写信息并能够保存的,即使这个activity被kill了以后打开,信息还在。所以不知道该怎么写,求带
0
放开那只肥鸡
放开那只肥鸡
首先你要说清楚你的需求,我不是很理解你的需求。你想表达的情况是保存用户的信息类似账号密码等,还是关于activity处于栈低被内存回收机制给kill了的情况。
菜鸟刘
菜鸟刘
对,就是保存用户填写的资料信息,即使app被kill了,以后打开后信息还不在。,求大神带带我
0
放开那只肥鸡
放开那只肥鸡
这个问题跟activity处于栈低被内存回收机制给kill没关系。除非你把代码写在stop方法里。这是关于存储的问题。android有文件,网络,sqlite,sharedpreference,contentprovide五种存储。这种小数据一般都是存储在sharedpreference里面。sharedpreference主要存储一些小数据,存储方式是以键值对的方式存储。首先通过上下文拿到sharedpreference,再拿到对应的编辑器。任何你想存储什么类型就存储了。之后记得要提交。下次登录之后打开sharedpreference,类似登录页面,判断是否自动填充账号密码,是否自动登录。这些简单的键值对还应该添加加密算法。毕竟是重要数据,小心被盗号。
放开那只肥鸡
放开那只肥鸡
回复 @菜鸟刘 : 当你按下登录按钮之后,你的信息已经保存在你手机的目录/data/data/<packagename>/shared_prefs里面了。这个目录一般会随着你应用的删除而删除。跟你应用关闭打开没有一丁点关系。
放开那只肥鸡
放开那只肥鸡
回复 @菜鸟刘 : 你的处理代码不是在登录按钮里面处理吗?只要用户点击了登录按钮之后,之后界面怎么搞都没关系,信息在登录按钮下已经保存了。所以跟你说的什么activity状态没啥关系。
菜鸟刘
菜鸟刘
大神,我忘了说用户填写的信息是可看见,是填在edittext里面的,app被kill了再次打开还能看见,不会重新创建,让用户再次填写,明白?
0
放开那只肥鸡
放开那只肥鸡
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_login"
    tools:context="${relativePackage}.${activityClass}" >


    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="14dp"
        
        android:src="@drawable/ic_logo" />


    <EditText
        android:id="@+id/account_edt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="19dp"
        android:paddingLeft="45dp"
        android:ems="10" />
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="账号:"
        android:layout_alignBaseline="@+id/account_edt"
        android:layout_alignLeft="@+id/account_edt"
        android:layout_marginLeft="6dp"
        
        />


    <EditText
        android:id="@+id/pwd_edt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/account_edt"
        android:layout_below="@+id/account_edt"
        android:layout_marginTop="34dp"
        android:ems="10"
        android:paddingLeft="45dp"
        android:inputType="textPassword" />
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密码:"
        android:layout_alignBaseline="@+id/pwd_edt"
        android:layout_alignLeft="@+id/pwd_edt"
        android:layout_marginLeft="6dp"
     />


    <CheckBox
        android:id="@+id/remenber_chx"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/pwd_edt"
        android:layout_below="@+id/pwd_edt"
        android:layout_marginTop="18dp"
        android:button="@drawable/chx_select"
        android:paddingLeft="18dp"
        android:text="记住信息" />


    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/remenber_chx"
        android:layout_below="@+id/remenber_chx"
        android:layout_marginTop="30dp"
        android:onClick="login"
        android:background="@drawable/btn_login_select"
        android:text="" />


    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_toRightOf="@+id/imageView1"
        android:onClick="register"
        android:background="@drawable/bt_register"
        android:text="" />


</RelativeLayout>
0
放开那只肥鸡
放开那只肥鸡
package cn.itcast.haredprefences;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;


public class LoginActivity extends Activity {
private EditText mAccoutnEdt;
private EditText mPwdEdt;
private CheckBox mRemenberChx;
private SharedPreferences sp;
private Context context;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();//初始化布局
        autoFile();//检测是否需要记住信息
    }


private void autoFile() {
if (sp.getBoolean("isCheck", false)) {
mAccoutnEdt.setText(sp.getString("usename", null));
mPwdEdt.setText(sp.getString("usepwd", null));
mRemenberChx.setChecked(true);
// 上面的false,null不是赋值为false跟null。这个方法是查找sp里面信息的方法,
// 而查找是根据key的唯一性来查找,所以输入了key之后值可以写false null是缺省的意思。
}
}


private void initView() {
mAccoutnEdt=(EditText)findViewById(R.id.account_edt);
mPwdEdt=(EditText)findViewById(R.id.pwd_edt);
mRemenberChx=(CheckBox)findViewById(R.id.remenber_chx);
sp=getSharedPreferences("info", context.MODE_PRIVATE);
context=this;

}
public void login(View v){
String account=mAccoutnEdt.getText().toString().trim();
String pwd=mPwdEdt.getText().toString();
if (TextUtils.isEmpty(account)||TextUtils.isEmpty(pwd)) {
Toast.makeText(context, "账号或者密码为空", 0).show();
return;
}
remenberInfo(account,pwd);
Intent intent=new Intent();
intent.setClass(this, SystemActivity.class);
startActivity(intent);
}
private void remenberInfo(String account, String pwd) {
Editor editor=sp.edit();
if (mRemenberChx.isChecked()) {
editor.putString("usename", account);
editor.putString("usepwd", pwd);
editor.putBoolean("isCheck", true);
}else{
editor.putBoolean("isCheck", false);
}
editor.commit();
}


public void register(View v){


}
}

放开那只肥鸡
放开那只肥鸡
回复 @菜鸟刘 : 我不是大神,找我没用的,我也只是先学你一段时间而已。这个只是我之前学习基础的时候做的练习。我只是学的感觉差不多开始找工作。就这天比较有空上网随便逛逛。平时不一定这么有空的。
菜鸟刘
菜鸟刘
大神,留个联系方式。
0
放开那只肥鸡
放开那只肥鸡

登录之后的页面,必须点击登录才能记住信息,因为代码存储是在登录按钮中运行的。

package cn.itcast.haredprefences;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;


public class SystemActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
ImageView imageView=new ImageView(this);
imageView.setImageResource(R.drawable.pic6);
setContentView(imageView);

}
}


返回顶部
顶部