解决uniapp打包成apk后uni.getStorageSync获取不到值

发布时间:2024年01月05日

????????uniapp写的项目,在hbuilderx中云打包成apk后我在登录存储的token死都获取不到,导致后续接口请求头没有token连接不到接口,只有运行到手机或者模拟器还有打包成apk后是获取不到,其他的小程序还有网页都可以获取到

????????试过了很多种方法,uni.getStorageSync、uni.setStorage和uni.getStorage进行存储、vuex还有全局变量...没一个成功的。但是在同一个页面进行存储和取值是可以实现。所以猜想是写法的问题。完整问题如下:uniapp打包成apk后uni.setStorageSync只能存储当前页面,页面切换时获取不到存储的值_前端-CSDN问答

1.在request.js请求接口页面添加本地存储设置

在这里我把存值和取值都在一个封装的请求方法里面,在get请求的请求头上使用tui.getToken()方法把获取的token传入,post请求也可以设置

/**
 * 常用方法封装 请求,文件上传等
 * @author echo. 
 **/
import qs from 'qs';
const tui= {
	// 设置
	setToken: function(token) {
		uni.setStorageSync("token_breed", token)
	},
	// 获取
	getToken() {
		return uni.getStorageSync("token_breed")
	},
	// 接口公共地址
	commoneUrl: function() {
		return 'http://xxx基本接口地址' // 生产
	},

	post: function(url, data, type) {
		var promise = new Promise((resolve, reject) => {
			var postData = data;
			uni.request({
				url: tui.commoneUrl() + url,
				data: qs.stringify(postData),
				method: 'POST',
				header: {
					'content-type': type || 'application/x-www-form-urlencoded'
				},
				success: function(res) {
					resolve(res.data);
					uni.hideLoading();
					if (res.data.code == 0) {
						uni.reLaunch({
							url: '/pages/login/login'
						})
					}
					// code ===0 失效问题
				},
				error: function(e) {
					reject('网络出错');
				}
			})
		});
		return promise;
	},
	get: function(url, data) {
		var promise = new Promise((resolve, reject) => {
			var postData = data;
			uni.request({
				url: tui.commoneUrl() + url,
				data: postData,
				method: "GET",
				dataType: 'json',
				header: {
					'content-type': 'application/x-www-form-urlencoded',
					'token': tui.getToken() || ''
				},
				success: function(res) {
					resolve(res.data);
					// if (res.data.code == 0) {
					// 	uni.reLaunch({
					// 		url: '/pages/tabBar/tabBar'
					// 	})
					// }
				},
				error: function(e) {
					reject('网络出错');
				}
			});
		});
		return promise;
	},
}

export default tui

2.main.js中导入request.js文件

并且在vue的原型链上添加全局$tui

import tui from './utils/request.js'
Vue.prototype.$tui = tui 

3.登录存储

登录使用get请求并且拼接路径和传参,之后使用this.$tui.setToken(res.token)方法,把token传入

login(){
this.$tui.get('/login',{name:'admin'}).then(res => {
						if (res.code == 200) {
							this.$tui.setToken(res.token)
							uni.reLaunch({
								url: '/pages/equip/index' // 跳转 - 首页
							})
						}else{
							uni.showToast({
								title: res.msg,
								duration: 2000,
								icon:'error'
							});

						}
					})
}

?4.页面发送请求

不需要再次传入token了

 queryEquip() {
				this.$tui.get("/deviceInfo").then(result=>{
				
				})
			},

5.效果

在手机基座上请求到了数据了

文章来源:https://blog.csdn.net/qq_44278289/article/details/135408117
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。