文档章节

android里的SharedPreference+示例(仿微信第一次进入有导航,以后进入消失)

tomcater
 tomcater
发布于 2014/04/27 17:15
字数 1650
阅读 506
收藏 6
点赞 0
评论 0

在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上 Android 为数据存储提供了如下几种方式:

1、文件

2、 SharedPreferences( 参数 )

3、SQLite数据库

4、 内容提供者( Content provider 

5、网络

在这里我们将对sharedpreferences存储方式进行介绍。

SharedPreferences是一种轻量级的数据存储方式,它可以用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/[包名] /shared_prefs/)自己定义的xml文件中。

SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储基本数据类型。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。实际上sharedPreferences是采用了XML格式将数据存储到设备中,在DDMS 中的File Explorer中的/data/data//shares_prefs下。

使用SharedPreferences保存key-value对的步骤如下:

  (1)使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。

  (2)使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。

  (3)通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。

  (4)通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作。

下面贴出我做的小项目的部分代码:

欢迎布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/welcome"
>
</LinearLayout>

欢迎界面JAVA文件

 package com.devdiv.test.ui_test_viewpager;

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.os.Handler;
import android.preference.PreferenceManager;
import android.view.Window;
import android.view.WindowManager;

public class appstart extends Activity{
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState); 
  //去掉标题栏
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  WindowManager.LayoutParams.FLAG_FULLSCREEN);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.appstart);
//设置要进入下一个页面和延迟时间
new Handler().postDelayed(new Runnable() {
 
 @Override
 public void run() {
  // TODO Auto-generated method stub
 Intent intent = new Intent( appstart.this,UI_Test_ViewPagerActivity.class);
 startActivity(intent);
 //appstart.this.finish();
 }
}, 1000);}
 //按手机上的返回键时直接退出程序
 protected void onPause() {
     // TODO Auto-generated method stub
     super.onPause();
     this.finish();
    }
 
 }

导航布局(一共六个页面,贴出的是最后一个,加了一个按钮进入主界面)

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout> 
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:background="@drawable/divider_horizontal_line">
     
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/feature_guide_5" >
        </ImageView>
 
    </LinearLayout>
<RelativeLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" 
         android:layout_gravity="center"
         
         >
     <Button
              android:id="@+id/startBtn"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentBottom="true"
              android:layout_centerHorizontal="true"
              android:layout_marginBottom="98dp"
              android:text="开始新的旅程吧" 
              android:textSize="18sp"
              android:onClick="welcome_start"/>
</RelativeLayout>
</FrameLayout>

导航JAVA

 import java.util.ArrayList;
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.os.Parcelable;
import android.preference.PreferenceManager;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.ImageView;
import android.widget.Toast;
public class UI_Test_ViewPagerActivity extends Activity {
 
 private ViewPager mViewPager;
 private ArrayList<View> mPageViews;
 private ImageView mImageView;
 private ImageView[] mImageViews;
 //sharepreference
 public static final String PREFS_NAME = "MyPrefsFile";  
    public static final String FIRST_RUN = "first";  
    private boolean first;  
 //该应用的主布局LinearLayout
 private ViewGroup mainViewGroup;
 //主布局底部指示当前页面的小圆点视图,LinearLayout
 private ViewGroup indicatorViewGroup;
 
 //定义LayoutInflater
 LayoutInflater mInflater;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.main);
        
        //设置窗口无标题
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       //设置第一次进入程序时进入导航界面,以后均不进入
    SharedPreferences prefs =  PreferenceManager.getDefaultSharedPreferences(this);
    boolean firstTime = prefs.getBoolean("first_time", true);
       if (firstTime){
         Editor pEditor = prefs.edit();
            pEditor.putBoolean("first_time", false);
            pEditor.commit();
               initViewPager();
       }   
       else {
      Intent intent = new Intent(this,mainactivity.class);
            startActivity(intent);
            finish();}
    
        //mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mInflater = getLayoutInflater();
        
        mPageViews = new ArrayList<View>();
        mPageViews.add(mInflater.inflate(R.layout.item01, null));
        mPageViews.add(mInflater.inflate(R.layout.item02, null));
        mPageViews.add(mInflater.inflate(R.layout.item03, null));
        mPageViews.add(mInflater.inflate(R.layout.item04, null));
        mPageViews.add(mInflater.inflate(R.layout.item05, null));
        mPageViews.add(mInflater.inflate(R.layout.item06, null));
        
        mImageViews = new ImageView[mPageViews.size()];
        
        mainViewGroup = (ViewGroup) mInflater.inflate(R.layout.main, null);
        
       mViewPager = (ViewPager) mainViewGroup.findViewById(R.id.myviewpager);
       indicatorViewGroup = (ViewGroup) mainViewGroup.findViewById(R.id.mybottomviewgroup);
        
        for (int i = 0; i < mImageViews.length; i++) {
         mImageView = new ImageView(UI_Test_ViewPagerActivity.this);  
         mImageView.setLayoutParams(new LayoutParams(20,20));  
         mImageView.setPadding(20, 0, 20, 0);  
         
         if (i == 0) {
          mImageView.setBackgroundResource(R.drawable.page_indicator_focused);    
   } else {
    mImageView.setBackgroundResource(R.drawable.page_indicator);
   }
   
         mImageViews[i] = mImageView;
         
         //把指示作用的远点图片加入底部的视图中
         indicatorViewGroup.addView(mImageViews[i]);
  }
        
        //注意这两种用法的区别,前者无法正常显示!!
        //setContentView(R.layout.main);
        setContentView(mainViewGroup);
        
        
        mViewPager.setAdapter(new MyPagerAdapter());
        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
   
   @Override
   public void onPageSelected(int arg0) {
    // TODO Auto-generated method stub
    for (int i = 0; i < mImageViews.length; i++) {
     if(i == arg0) {
      mImageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);
     } else {
      mImageViews[i].setBackgroundResource(R.drawable.page_indicator);
     }
    }
   }
   
   @Override
   public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub
    
   }
  });
        
    }
    
    private void initViewPager() {
  // TODO Auto-generated method stub
  
 }
 class MyPagerAdapter extends PagerAdapter {
     @Override  
        public int getCount() {  
            return mPageViews.size();  
        }  
  
        @Override  
        public boolean isViewFromObject(View arg0, Object arg1) {  
            return arg0 == arg1;  
        }  
  
        @Override  
        public int getItemPosition(Object object) {  
            // TODO Auto-generated method stub  
            return super.getItemPosition(object);  
        }  
  
        @Override  
        public void destroyItem(View arg0, int arg1, Object arg2) {  
            // TODO Auto-generated method stub  
            ((ViewPager) arg0).removeView(mPageViews.get(arg1));  
        }  
  
        @Override  
        public Object instantiateItem(View arg0, int arg1) {  
            // TODO Auto-generated method stub  
            ((ViewPager) arg0).addView(mPageViews.get(arg1));  
            return mPageViews.get(arg1);  
        }  
  
        @Override  
        public void restoreState(Parcelable arg0, ClassLoader arg1) {  
            // TODO Auto-generated method stub  
  
        }  
  
        @Override  
        public Parcelable saveState() {  
            // TODO Auto-generated method stub  
            return null;  
        }  
  
        @Override  
        public void startUpdate(View arg0) {  
            // TODO Auto-generated method stub  
  
        }  
  
        @Override  
        public void finishUpdate(View arg0) {  
            // TODO Auto-generated method stub  
  
        } 
       
     
    }
    public void welcome_start(View v) {
  Intent intent1 = new Intent();
  intent1.setClass(UI_Test_ViewPagerActivity.this,mainactivity.class);
  startActivity(intent1);  
 } 
    @Override
    protected void onPause() {
     // TODO Auto-generated method stub
     super.onPause();
     this.finish();
    }
}

主界面布局

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#C6E2FF">
     <Button
            android:id="@+id/main_chart"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="150dp"
            android:background="@drawable/btn_normal"
            android:layout_gravity="center_horizontal"
            android:text="工作查询"
            android:textColor="#000000"
            android:textSize="18sp"
            
              />
 <Button
            android:id="@+id/main_chart"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@drawable/btn_normal"
            android:layout_gravity="center_horizontal"
            android:text="图表查询"
            android:textColor="#000000"
            android:textSize="18sp"
            
              />
     <Button
            android:id="@+id/main_set"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@drawable/btn_normal"            
            android:layout_gravity="center_horizontal"
            android:text="设置"
            android:textColor="#000000"
            android:textSize="18sp"
            
              />
     <Button
            android:id="@+id/mian_aboutus"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@drawable/btn_normal"           
            android:layout_gravity="center_horizontal"
            android:text="关于我们"
            android:textColor="#000000"
            android:textSize="18sp"
            
              />
   
</LinearLayout>

主界面JAVA

 package com.devdiv.test.ui_test_viewpager;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
import android.view.WindowManager;

public class mainactivity extends Activity{
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  WindowManager.LayoutParams.FLAG_FULLSCREEN);
  requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
  setContentView(R.layout.mainactivity);
  //requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
 }
 protected void onPause() {
     // TODO Auto-generated method stub
     super.onPause();
     this.finish();
    }}

以上就是最近几天的成果,里面有ViewPagede 使用,还有SharedPreference的一种使用方法,当然SharedPreference还有很多应用,比如QQ登录界面记住密码选项(示例http://www.oschina.net/question/54100_31831)等。

© 著作权归作者所有

共有 人打赏支持
tomcater
粉丝 4
博文 43
码字总数 55169
作品 0
海淀
程序员
Android ViewPager使用详解

这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等...

Remix_jx ⋅ 2014/10/27 ⋅ 0

android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码

Android精选源码 Android自定义索引源码(http://www.apkbus.com/thread-599163-1-1.html) LayoutManager实现的卡片滑动(http://www.apkbus.com/thread-599396-1-1.html) android仿摩拜单车A......

逆鳞龙 ⋅ 05/22 ⋅ 0

只需两步获取任何微信小程序源码

第一次在掘金这样高大上的社区写文章,忐忑地敲下我获取小程序源码过程中的经验分享。 最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了一个滴滴他们家的青桔单...

行无忌 ⋅ 05/31 ⋅ 0

Android P 导航栏变为两颗虚拟键,或支持原生手势操作

从目前的趋势来看,手机继续弱化按键将成为主流,技术支撑包括全面屏、屏下指纹,以后今后的屏下摄像头、传感器甚至是听筒等。 没有了按键,交互完全依赖屏幕,所以在iPhone X的iOS 11系统上...

局长 ⋅ 04/15 ⋅ 0

微信Android客户端架构演进之路

去年7月,笔者在InfoQ举办的ArchSummit深圳2014的架构师峰会上,分享了微信Android客户端的架构演进史。可以说,这是一个典型的Android应用在从小到大的成长过程中的“踩坑”与“填坑”的历史...

浮躁的码农 ⋅ 05/29 ⋅ 0

android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码

Android精选源码 Android 炫酷的多重水波纹源码(http://www.apkbus.com/thread-598586-1-1.html) Android开发一款基于行为识别和个性化推荐的智能推荐APP(http://www.apkbus.com/thread-5985...

逆鳞龙 ⋅ 05/02 ⋅ 0

Android仿QQ微信开场导航以及登陆界面

相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后进入应用,这一效果适用于多种项目中,相信今后开...

长平狐 ⋅ 2013/04/25 ⋅ 0

谈谈分享邀请奖励机制(附iOS实现代码)

2017.03.14 以后不做标题党了,感觉现在越来越多的技术文章题目屌炸天,内容空泛没有干货,甚至好多把官方文档摘过来,还摘得不全,简直是垃圾。虽然我现在写不出牛逼的文章,但是我最起码不...

si1ence ⋅ 2017/12/14 ⋅ 0

Android通知栏微技巧,8.0系统中通知栏的适配

转载请注明出处:https://blog.csdn.net/guolinblog/article/details/79854070 大家好,今天我们继续来学习Android 8.0系统的适配。 之前我们已经讲到了,Android 8.0系统最主要需要进行适配...

sinyu890807 ⋅ 04/17 ⋅ 0

android开发常用工具类、高仿客户端、附近厕所、验证码助手、相机图片处理等源码

Android精选源码 android开发过程经常要用的工具类源码(http://www.apkbus.com/thread-599826-1-1.html) Android类似QQ空间个人主页下拉头部放大的布局效果(http://www.apkbus.com/thread-5...

逆鳞龙 ⋅ 05/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 21分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 25分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 28分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 47分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 53分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 54分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 57分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 57分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 今天 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部