日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php换设备登录逻辑,登录和退出登录的操作逻辑

發布時間:2023/12/2 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php换设备登录逻辑,登录和退出登录的操作逻辑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

登錄功能的操作邏輯步驟如下:可以分為五個步驟來實現。

1、進入頁面先判斷用戶是否已經登錄

private void isLogin() {

//查看本地是否有用戶的登錄信息

SharedPreferences sp = this.getActivity().getSharedPreferences("user_info", Context.MODE_PRIVATE);

String name = sp.getString("name", "");

if (TextUtils.isEmpty(name)) {

//本地沒有保存過用戶信息,給出提示:登錄

doLogin();

} else {

//已經登錄過,直接加載用戶的信息并顯示

doUser();

}

}

2、沒有登錄過,則提示用戶登錄,點擊后跳轉到登錄頁面

//提示用戶登錄

private void doLogin() {

new AlertDialog.Builder(this.getActivity())

.setTitle("提示")

.setMessage("您還沒有登錄哦!么么~")

.setPositiveButton("確定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialogInterface, int i) {

// UIUtils.toast("進入登錄界面",false);

((BaseActivity) MeFragment.this.getActivity()).goToActivity(LoginActivity.class, null);

}

})

.setCancelable(false)

.show();

}

3、在登錄頁面中做登錄操作,登錄成功后保存相應的用戶信息到本地

//保存用戶信息

public void saveUser(User user){

SharedPreferences sp = this.getSharedPreferences("user_info", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = sp.edit();

editor.putString("name",user.getName());

editor.putString("imageurl",user.getImageurl());

editor.putBoolean("iscredit",user.isCredit());

editor.putString("phone",user.getPhone());

editor.commit();//必須提交,否則保存不成功

}

4、用戶已經登錄過了,則加載并顯示相應的信息

//加載用戶信息并顯示

private void doUser() {

//1.讀取本地保存的用戶信息

User user = ((BaseActivity) this.getActivity()).readUser();

//2.獲取對象信息,并設置給相應的視圖顯示

tvMeName.setText(user.getName());

//判斷本地是否已經保存頭像的圖片,如果有,則不執行聯網操作

boolean isExist = readImage();

if (isExist){

return;

}

//使用Picasso聯網獲取圖片

Picasso.with(this.getActivity()).load(user.getImageurl()).transform(new Transformation() {

@Override

public Bitmap transform(Bitmap source) {//下載以后的內存中的bitmap對象

//壓縮處理

Bitmap bitmap = BitmapUtils.zoom(source, UIUtils.dp2px(62), UIUtils.dp2px(62));

//圖形處理

bitmap = BitmapUtils.circleBitmap(bitmap);

//回收bitmap對象

source.recycle();

return bitmap;

}

@Override

public String key() {

return "";

}

}).into(ivMeIcon);

}

5、退出登錄,需要清除本地保存的用戶信息

public void logout(View view){//"退出登錄"button的回調方法

//1、將保存在sp中的數據刪除

SharedPreferences sp = this.getSharedPreferences("user_info", Context.MODE_PRIVATE);

sp.edit().clear().commit();//清除數據必須要提交:提交以后,文件仍存在,只是文件中的數據被清除了

//2、將本地保存的圖片的file刪除

File filesDir;

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//判斷sd卡是否掛載

//路徑1:storage/sdcard/Android/data/包名/files

filesDir = this.getExternalFilesDir("");

} else {//手機內部存儲

//路徑:data/data/包名/files

filesDir = this.getFilesDir();

}

File file = new File(filesDir, "icon.png");

if (file.exists()){

file.delete();//刪除存儲中的文件

}

//3、銷毀所有的Activity

this.removeAll();

//4、重新進入首頁面

goToActivity(MainActivity.class,null);

}

登錄返回的信息實體類User.class

public class User {

private int id;// 編號

private String name;// 姓名

private String password;// 密碼

private String phone;// 手機號

private String imageurl;// 頭像地址

private boolean iscredit;// 是否公安部認證

public User() {

super();

}

public User(int id, String name, String password, String phone) {

super();

this.id = id;

this.name = name;

this.password = password;

this.phone = phone;

}

public User(int id, String name, String password, String phone,

String imageurl) {

super();

this.id = id;

this.name = name;

this.password = password;

this.phone = phone;

this.imageurl = imageurl;

}

public User(int id, String name, String password, String phone,

String imageurl, boolean iscredit) {

super();

this.id = id;

this.name = name;

this.password = password;

this.phone = phone;

this.imageurl = imageurl;

this.iscredit = iscredit;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public String getImageurl() {

return imageurl;

}

public void setImageurl(String imageurl) {

this.imageurl = imageurl;

}

public boolean isCredit() {

return iscredit;

}

public void setCredit(boolean iscredit) {

this.iscredit = iscredit;

}

@Override

public String toString() {

return "User [id=" + id + ", name=" + name + ", password=" + password

+ ", phone=" + phone + ", imageurl=" + imageurl + ", iscredit="

+ iscredit + "]";

}

}

登錄的時候,后臺返回的信息,我們需要把常用的用戶信息保存到本地。

保存代碼方法如下:

//保存用戶信息

public void saveUser(User user){

SharedPreferences sp = this.getSharedPreferences("user_info", Context.MODE_PRIVATE);

SharedPreferences.Editor editor = sp.edit();

editor.putString("name",user.getName());

editor.putString("imageurl",user.getImageurl());

editor.putBoolean("iscredit",user.isCredit());

editor.putString("phone",user.getPhone());

editor.commit();//必須提交,否則保存不成功

}

讀取用戶信息方法如下:

//讀取用戶信息

public User readUser(){

SharedPreferences sp = this.getSharedPreferences("user_info", Context.MODE_PRIVATE);

User user = new User();

user.setName(sp.getString("name",""));

user.setImageurl(sp.getString("imageurl",""));

user.setPhone(sp.getString("phone",""));

user.setCredit(sp.getBoolean("iscredit",false));

return user;

}

退出登錄的時候,需要把用戶信息清除。代碼方法如下:

public void logout(View view){//"退出登錄"button的回調方法

//1、將保存在sp中的數據刪除

SharedPreferences sp = this.getSharedPreferences("user_info", Context.MODE_PRIVATE);

sp.edit().clear().commit();//清除數據必須要提交:提交以后,文件仍存在,只是文件中的數據被清除了

//2、將本地保存的圖片的file刪除

File filesDir;

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//判斷sd卡是否掛載

//路徑1:storage/sdcard/Android/data/包名/files

filesDir = this.getExternalFilesDir("");

} else {//手機內部存儲

//路徑:data/data/包名/files

filesDir = this.getFilesDir();

}

File file = new File(filesDir, "icon.png");

if (file.exists()){

file.delete();//刪除存儲中的文件

}

//3、銷毀所有的Activity

this.removeAll();

//4、重新進入首頁面

goToActivity(MainActivity.class,null);

}

將bitmap圖片保存到本地的操作

//將bitmap保存到本地的操作

/**

* 數據的存儲。(5種)

* Bimap:內存層面的圖片對象。

*

* 存儲--->內存:

* BitmapFactory.decodeFile(String filePath);

* BitmapFactory.decodeStream(InputStream is);

* 內存--->存儲:

* bitmap.compress(Bitmap.CompressFormat.PNG,100,OutputStream os);

*/

private void saveImage(Bitmap bitmap) {

File filesDir;

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判斷sd卡是否掛載

//路徑1:storage/sdcard/Android/data/包名/files

filesDir = this.getExternalFilesDir("");

}else {//手機內部存儲

//路徑:data/data/包名/files

filesDir = this.getFilesDir();

}

FileOutputStream fos = null;

try {

File file = new File(filesDir,"icon.png");

fos = new FileOutputStream(file);

bitmap.compress(Bitmap.CompressFormat.PNG,100,fos);

} catch (FileNotFoundException e) {

e.printStackTrace();

}finally {

if (fos!=null){

try {

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

讀取本地保存的圖片,并設置到相應的ImageView控件

//讀取本地保存的頭像圖片

private void readImage(ImageView img) {

File filesDir;

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//判斷sd卡是否掛載

//路徑1:storage/sdcard/Android/data/包名/files

filesDir = this.getExternalFilesDir("");

} else {//手機內部存儲

//路徑:data/data/包名/files

filesDir = this.getFilesDir();

}

File file = new File(filesDir, "icon.png");

if (file.exists()){

//存儲-->內存

Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());

img.setImageBitmap(bitmap);

}

}

Activity的管理器類代碼如下:

import android.app.Activity;

import java.util.Stack;

/**

* 作者: willkong on 2017/10/31.

* 作用:統一應用程序中所有的Activity的棧管理(單例)

* 涉及到activity的添加、刪除指定、刪除當前、刪除所有、返回棧大小的方法

*/

public class ActivityManager {

//單例模式:餓漢式

private ActivityManager(){

}

private static ActivityManager activityManager = new ActivityManager();

public static ActivityManager getInstance(){

return activityManager;

}

//提供棧的對象

private Stack activityStack = new Stack<>();

//activity的添加

public void add(Activity activity){

if(activity != null){

activityStack.add(activity);

}

}

//插曲:[12,3,44,6,332,65,-56,1]

//刪除指定的activity

public void remove(Activity activity){

if(activity != null){

// for(int i = 0; i < activityStack.size(); i++) {

// Activity currentActivity = activityStack.get(i);

// if(currentActivity.getClass().equals(activity.getClass())){

// currentActivity.finish();//銷毀當前的activity

// activityStack.remove(i);//從棧空間移除

// }

// }

for(int i = activityStack.size() - 1;i >= 0;i--){

Activity currentActivity = activityStack.get(i);

if(currentActivity.getClass().equals(activity.getClass())){

currentActivity.finish();//銷毀當前的activity

activityStack.remove(i);//從??臻g移除

}

}

}

}

//刪除當前的activity

public void removeCurrent(){

//方式一:

// Activity activity = activityStack.get(activityStack.size() - 1);

// activity.finish();

// activityStack.remove(activityStack.size() - 1);

//方式二:

Activity activity = activityStack.lastElement();

activity.finish();

activityStack.remove(activity);

}

//刪除所有的activity

public void removeAll(){

for (int i = activityStack.size() - 1;i >= 0;i--){

Activity activity = activityStack.get(i);

activity.finish();

activityStack.remove(activity);

}

}

//返回棧大小

public int size(){

return activityStack.size();

}

}

用法是在基類BaseActivity中進行初始化,并編寫操作方法。

在BaseActivity的onCreate方法中初始化管理器

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//將當前的Activity添加到ActivityManager中

ActivityManager.getInstance().add(this);

}

//啟動新的Activity

public void goToActivity(Class Activity,Bundle bundle){

Intent intent = new Intent(this,Activity);

if (bundle!=null&&bundle.size()!=0){

intent.putExtra("data",bundle);

}

startActivity(intent);

}

//銷毀當前的Activity

public void removeCurrentActivity(){

ActivityManager.getInstance().removeCurrent();

}

//銷毀所有的Activity

public void removeAll(){

ActivityManager.getInstance().removeAll();

}

圖像處理工具類BitmapUtils.class

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.PorterDuff;

import android.graphics.PorterDuffXfermode;

/**

* 作者: willkong on 2017/11/21.

* 作用:圖像處理工具類

*/

public class BitmapUtils {

public static Bitmap circleBitmap(Bitmap source) {

int width = source.getWidth();

Bitmap bitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();

paint.setAntiAlias(true);

canvas.drawCircle(width / 2, width / 2, width / 2, paint);

//設置圖片相交情況下的處理方式

//setXfermode:設置當繪制的圖像出現相交情況時候的處理方式的,它包含的常用模式有:

//PorterDuff.Mode.SRC_IN 取兩層圖像交集部分,只顯示上層圖像

//PorterDuff.Mode.DST_IN 取兩層圖像交集部分,只顯示下層圖像

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

canvas.drawBitmap(source, 0, 0, paint);

return bitmap;

}

//實現圖片的壓縮處理

public static Bitmap zoom(Bitmap source,float w,float h){

Matrix matrix = new Matrix();

//圖片的壓縮處理

matrix.postScale(w / source.getWidth(),h / source.getHeight());

Bitmap bitmap = Bitmap.createBitmap(source,0,0,source.getWidth(),source.getHeight(),matrix,true);

return bitmap;

}

}

總結

以上是生活随笔為你收集整理的php换设备登录逻辑,登录和退出登录的操作逻辑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。