IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 开发基础代码 -> 正文阅读

[移动开发]开发基础代码

Mac下MySql启动

sudo chown -R mysql /usr/local/mysql/data
sudo /usr/local/mysql/support-files/mysql.server start

获得状态栏导航栏高度(uniapp)

onReady() {
	// 获得状态栏导航栏高度
	var that = this
	uni.getSystemInfo({
		success(e) {
			let statusBar = 0
			let customBar = 0

			// #ifdef MP
			statusBar = e.statusBarHeight
			customBar = e.statusBarHeight + 45
			if (e.platform === 'android') {
				customBar = e.statusBarHeight + 50
			}
			// #endif

			// #ifdef MP-WEIXIN
			statusBar = e.statusBarHeight
			// @ts-ignore
			const custom = wx.getMenuButtonBoundingClientRect()
			customBar = custom.bottom + custom.top - e.statusBarHeight
			// #endif

			// #ifdef MP-ALIPAY
			statusBar = e.statusBarHeight
			customBar = e.statusBarHeight + e.titleBarHeight
			// #endif

			// #ifdef APP-PLUS
			statusBar = e.statusBarHeight
			customBar = e.statusBarHeight + 45
			// #endif

			// #ifdef H5
			statusBar = 0
			customBar = e.statusBarHeight + 45
			// #endif
			if (e.platform === 'android') {
				that.statusBar=0
			}else{
				that.statusBar=statusBar
			}
			
			that.customBar = customBar
			const query = uni.createSelectorQuery().in(this);
			query.select('#editor').boundingClientRect(data => {
				that.domHeight = data.height
			}).exec();
		}
	})
},

npm设置淘宝镜像

npm i -g cnpm --registry=https://registry.npm.taobao.org

html转码

this.desc = this.changeHtml(data.data.desc.content)

changeHtml(str) {
	var arrEntities = {
		'lt': '<',
		'gt': '>',
		'nbsp': ' ',
		'amp': '&',
		'quot': '"'
	};
	return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function(all, t) {
		return arrEntities[t];
	})
},

提取富文本中的img标签中的src属性值

var arr=[]
var desc=this.changeHtml(list[i].content)
desc.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, function (match, capture) {
  arr.push(capture)
});
map['content'] =arr

设置富文本中图片大小

const regex = new RegExp('<img', 'gi')
this.desc = this.changeHtml(data.data.desc.content).replace(regex,`<img style="max-width: 100%; height: auto"`);

时间戳转日期

this.formatDate(data.data.desc.add_time * 1000)

formatDate(value) {
	let date = new Date(value)
	let y = date.getFullYear()
	let m = date.getMonth() + 1
	let d = date.getDate()
	y = y < 10 ? ('0' + y) : y
	m = m < 10 ? ('0' + m) : m
	d = d < 10 ? ('0' + d) : d
	return y + '.' + m + '.' + d
},

时间戳转时间

this.formatTime(data.data.desc.add_time * 1000)

formatTime(value) {
	let date = new Date(value)
	let h = date.getHours()
	let m = date.getMinutes()
	let s = date.getSeconds()
	h = h < 10 ? ('0' + h) : h
	m = m < 10 ? ('0' + m) : m
	s = s < 10 ? ('0' + s) : s
	// return h + ':' + m + '-' + s
	return h + ':' + m
},

计算多长时间之前

handlePublishTimeDesc(value) {
	// 拿到当前时间戳和发布时的时间戳,然后得出时间戳差
	var curTime = parseInt(new Date().getTime() / 1000);
	var postTime = new Date();
	var timeDiff = curTime - value;
	// 单位换算
	var min = 60;
	var hour = min * 60;
	var day = hour * 24;
	var week = day * 7;
	var month = week * 4;
	var year = month * 12;
	// 计算发布时间距离当前时间的周、天、时、分
	var exceedyear = Math.floor(timeDiff / year);
	var exceedmonth = Math.floor(timeDiff / month);
	var exceedWeek = Math.floor(timeDiff / week);
	var exceedDay = Math.floor(timeDiff / day);
	var exceedHour = Math.floor(timeDiff / hour);
	var exceedMin = Math.floor(timeDiff / min);
	// 最后判断时间差到底是属于哪个区间,然后return
	if (exceedyear < 100 && exceedyear > 0) {
		return exceedyear + '年前';
	} else {
		if (exceedmonth < 12 && exceedmonth > 0) {
			return exceedmonth + '月前';
		} else {
			if (exceedWeek < 4 && exceedWeek > 0) {
				return exceedWeek + '星期前';
			} else {
				if (exceedDay < 7 && exceedDay > 0) {
					return exceedDay + '天前';
				} else {
					if (exceedHour < 24 && exceedHour > 0) {
						return exceedHour + '小时前';
					} else {
						return exceedMin + '分钟前';
					}
				}
			}
		}
	}
},

html文字超过部分显示为省略号

overflow: hidden;
text-overflow: ellipsis;
display:-webkit-box;
-webkit-box-orient:vertical;
-webkit-line-clamp:2;

overflow: hidden;text-overflow: ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;

文字滑动(手动)

overflow-x: scroll;white-space: nowrap;width: 100%;

判断身份证

var regIdNo = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (this.str_card_id != ''){
  if (!regIdNo.test(this.str_card_id)) {
	alert('身份证号填写有误');
	return false;
  }
}

判断电话

var myreg1 = /^1(3|4|5|6|7|8|9)\d{9}$/;
if(this.str_tel!=''){
	if(!myreg1.test(this.str_tel)){
		uni.showToast({
			title: "手机号码格式不正确",
			icon:"none"
		})
		this.flag_popul=false
		return false;
	}
}

判断小数点后输入限制

var myreg = /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/;
if (!myreg.test(this.str_price)) {
	uni.showToast({
		title: "请小数点后填写两位",
		icon: "none"
	})
	return false
}

拨打电话

way_call(){
	uni.makePhoneCall({
		phoneNumber: this.orderData.driver_phone //仅为示例
	});
},

复制文字

uni.setClipboardData({
	data: value
});

点击切换隐藏显示内容

:style="'overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: '+hang+';'"

data() {
	return {
		hang: 2,
		flag_hang: true,
	}
},
way_desc() {
	this.flag_hang = !this.flag_hang
	if (this.flag_hang) {
		this.hang = 2
	} else {
		this.hang = 10
	}
},

uniapp页面跳转传递复杂参数

A:
uni.navigateTo({
	url: '/pages/web-view/web-view?url=' +encodeURIComponent(JSON.stringify(list)) 
})
B:	
this.url= JSON.parse(decodeURIComponent(options.url))

背景颜色渐变

background-image: linear-gradient(to right , #3431DD, #3B5EFE);

uniapp的轮播

<swiper class="swiper" autoplay="true" interval="5000" duration="1500" circular="true">
	<block v-for="(item,index) in bannerData" :key="index">
		<swiper-item previous-margin="10px" next-margin="10px">
			<image style="width: 100%;height: 100%;border-radius: 10rpx;" :src="item.banner_img" mode="scaleToFill"></image>
		</swiper-item>
	</block>
</swiper>

设置背景图片(app)

width: 100%;
	height: 100%;
	background-image: url(../../static/images/bg3.png);
	background-repeat: no-repeat;
	background-size: 100% 100%;				

小程序设置背景图片

<image style="width: 100%;height: 100%;position: absolute;top: 0;left: 0;z-index: -1;bottom: 0;right: 0;" src="../../static/images/bg4.png"></image>

获得状态栏高度(小程序,app)

<template>
    <view>
        <view class="status_bar">
        	//这里是状态栏
        </view>
    </view>
</template>    
<style>
    .status_bar {
        height: var(--status-bar-height);	//这里是状态栏css变量
        width: 100%;
    }
</style>
onLoad() {
	let that = this;
		wx.getSystemInfo({
			success: function(res) {
				res.statusBarHeight; //这就是状态栏的高度
			},
		});
},

自定义状态栏

pages.json:
"navigationStyle": "custom"

小程序自定义状态栏+标题栏高度

<view class="status_bar"></view>
	<view:style="'width: 100%;height:'+height+ 'px;display: flex;justify-content: flex-start;align-items: center;background-image: linear-gradient(to right , #FF9494, #FE3E3E);'">
		<image src="../../static/images/search.png" style="width: 33rpx;height: 33rpx;margin-left: 33rpx;"></image>
	</view>

onLoad() {
	let that = this
	uni.getSystemInfo({
		success: e => {
			let StatusBar = e.statusBarHeight;
			let rect = wx.getMenuButtonBoundingClientRect();
			if (e.system.toLowerCase().indexOf('ios') > -1) {
				//IOS  
				let CustomBar = rect.bottom + (rect.top - e.statusBarHeight) * 2;
				that.height = CustomBar - e.statusBarHeight;
			} else {
				//安卓  
				let HeaderBar = rect.height + (rect.top - e.statusBarHeight) * 2;
				that.height = HeaderBar + e.statusBarHeight;
			}
		}
	});
},
		
.status_bar {
	height: var(--status-bar-height); //这里是状态栏css变量
	width: 100%;
	background-image: linear-gradient(to right, #FF9494, #FE3E3E);
}
pages.json:
"navigationStyle": "custom"

拆分图片

var img = goodsData.goods_img.split("###")
var arr = img.filter(function(el) {
	return el !== '';
});
this.goodsImg = arr

/uni.navigateBack({})返回携带参数

go_back() {
	let pages = getCurrentPages(); //获取所有页面栈实例列表
	let nowPage = pages[pages.length - 1]; //当前页页面实例
	let prevPage = pages[pages.length - 2]; //上一页页面实例
	prevPage.$vm.tagIndex = this.index; //修改上一页data里面的searchVal参数值为1211
	uni.navigateBack({ //uni.navigateTo跳转的返回,默认1为返回上一级
		delta: 1
	});

	// uni.navigateBack({})
},

弹框

var that=this
uni.showModal({
	title: '提示',
	content: '这是一个模态弹窗',
	showCancel:true,
	success: function (res) {
		if (res.confirm) {
			console.log('用户点击确定');
		} else if (res.cancel) {
			console.log('用户点击取消');
		}
	}
});		

uniapp回到顶部

uni.pageScrollTo({
	scrollTop: 0,
	duration: 300
});	

uniapp请求接口

uni.request({
	method: "POST",
	url: this.httpUrl + '5fe01e7abc95d',
	header: {
		'content-type': "application/x-www-form-urlencoded"
	},
	data: {
		
	},
	success: (res) => {
		console.log("====" + JSON.stringify(res))
		var data = res.data;
		if (data.code == 1) {

		} else {
			uni.showToast({
				title: data.msg,
				icon: "none"
			});
		}
	}
});	

比较日期大小

compareDate(dateTime1,dateTime2) {
	var formatDate1 = new Date(dateTime1)
	var formatDate2 = new Date(dateTime2)
	if(formatDate1 > formatDate2) {
		return true;
	}else {
		return false;
	}
},			

判断日期相差几天

count(date1,date2) {
	var date1 = new Date(date1);
	var date2 = new Date(date2);
	var date = (date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24); /*不用考虑闰年否*/
	return date
},

//多选

<view v-if="isActive.indexOf(1)==-1"></view>

item(index) {
	if (this.isActive.indexOf(index) == -1) {
		console.log(index) //打印下标
		this.isActive.push(index); //选中添加到数组里
	} else {
		this.isActive.splice(this.isActive.indexOf(index), 1); //取消
	}
},	

小程序button去除边框

button::after{ border: none; }			

小程序分享

<button open-type="share">分享</button>

onShareAppMessage(res) {
	return {
		title: '多选',
		desc: this.title,
		path: '/pages/answer/recording-duo?correct_num='+this.dui+'&error_num='+this.cuo+'&answer_title='+this.title+'&score='+this.score,
		imageUrl: "",
		success: res => {
		},
		fail: err => {
		},
	}
},

js去除数组对象中的重复对象

1.
 var arr = [
    {id: 1, name: 'sli', year: 2012},
    {id: 2, name: 'ap', year: 2015},
    {id: 1, name: 'alslion', year: 2012},
    {id: 3, name: 'pose', year: 2012},
]

//删除arr中的重复对象
var newArr= [];
var arrId = [];
for(var item of arr){
    if(arrId.indexOf(item['id']) == -1){
        arrId.push(item['id']);
        newArr.push(item);
    }
}
console.log(arrId,newArr);

2.
var arr = [
	{name:'uzi',color:'blue'},
	{name:'pdd',color:'white'},
	{name:'mlxg',color:'orange'},
	{name:'uzi',color:'red'},
]

let hash = {};
var newArr = arr.reduce((item, next) => {
	hash[next.name] ? '' : hash[next.name] = true && item.push(next);
	return item
}, []);
console.log(newArr);

//数组对象完全相同的去除
function delObj(obj) {
	var uniques = [];
	var stringify = {};
	for (var i = 0; i < obj.length; i++) {
		var keys = Object.keys(obj[i]);
		keys.sort(function(a, b) {
			return (Number(a) - Number(b));
		});
		var str = '';
		for (var j = 0; j < keys.length; j++) {
			str += JSON.stringify(keys[j]);
			str += JSON.stringify(obj[i][keys[j]]);
		}
		if (!stringify.hasOwnProperty(str)) {
			uniques.push(obj[i]);
			stringify[str] = true;
		}
	}
	uniques = uniques;
	return uniques;
}
var arr = [
	{name:'uzi',color:'blue'},
	{name:'pdd',color:'white'},
	{name:'mlxg',color:'orange'},
	{name:'uzi',color:'blue'},
]
console.log('arr:',delObj(arr))

var arr1 = [
	{name:'uzi',color:'blue'},
	{name:'pdd',color:'white'},
	{name:'mlxg',color:'orange'},
	{name:'uzi',color:'red'},
]
console.log('arr1:',delObj(arr1))

HTML
var user_id = sessionStorage.id;
var token = sessionStorage.token

	<div class="flag_show" style="width: 100%;text-align: center;height: auto;display: none;">~没有更多数据~</div>

if ($(‘input[name=findtext]’).val() == ‘’) {
getOrder()
}

//input动态设置值
$(“input[name=‘c_contact_name’]”).attr(“value”, data[0].user_name);

工程进行中
state = $(this).data('status');

//获得页面跳转传递的参数
var id = GetRequest().id
//获取地址栏的url参数
function GetRequest() {
var url = location.search; //获取url中"?“符后的字串
console.log(‘url===’+url)
var theRequest = new Object();
if (url.indexOf(”?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}

res.data.forEach(function (item, index) {
//ES6新语法:模板字符串
html +=
<option value="${item.company_name}">${item.company_name}</option>;
})
$(’.conpany’).html(html);

//新增模板
$newbox = $(

’ +
’);
( ′ . b l i s t ′ ) . p r e p e n d ( ('.b_list').prepend( (.bl?ist).prepend(newbox);//在选中标签开始的地方插入内容
( ′ . b l i s t ′ ) . a p p e n d ( ('.b_list').append( (.bl?ist).append(newbox);//在选中目标的结尾插入内容
( ′ . b l i s t ′ ) . a f t e r ( ('.b_list').after( (.bl?ist).after(newbox);//在被选元素之后插入内容
( ′ . b l i s t ′ ) . b e f o r e ( ('.b_list').before( (.bl?ist).before(newbox);//在被选标签前面插入内容

$(’.onway’).click(function() {
state = $(this).data(‘status’);
console.log(state);
order(state);
})
// 已完成
$(’.finish’).click(function() {
state = $(this).data(‘status’);
console.log(state);
order(state);

})

$.getJSON(‘http://aef.yunfangshi.com/api/600bddfc4b0ef’, { user_id: user_id, token_id: token }, function(res) {
console.log(‘业务员端===’+JSON.stringify(res));
if (res.code == 1) {

} else {
	layer.msg(res.msg);
}

})

//动态设置select默认选中的option
$(’.bizhong’).val(‘4’)

//jq设置页面加载完成事件
$(function () {
getOrder()
})

返回上一步

window.history.back(-1);
window.history.go(-1);//返回上一页不刷新
window.history.back(); //返回上一页
window.location.href = document.referrer;//返回上一页并刷新,真正实现页面后退并刷新页面
history.go(1);//前进一页
history.forward(); //前进一页
history.length;//用length属性查看历史中的页面数

history.go(-1)和history.back()的区别
1.history.go(-1)表示后退与刷新。如数据有改变也随之改变
2.history.back()只是单纯的返回到上一页。

//页面跳转
location.href = “index.html”

var sex = $(‘input[name=user_sex]’).val();
$(‘input[name=user_phone]’).val(res.data.user_phone)
$(“input[name=‘b_actual_price’]”).attr(“value”, data.b_actual_price);

添加

//js实现移动HTML5页面滑动到最底部触发内容加载

//文档高度
function getDocumentTop() {
var
scrollTop = 0,
bodyScrollTop = 0,
documentScrollTop = 0;
if (document.body) {
bodyScrollTop = document.body.scrollTop;
}
if (document.documentElement) {
documentScrollTop = document.documentElement.scrollTop;
}
scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
return scrollTop;
}
//可视窗口高度
function getWindowHeight() {
var windowHeight = 0;
if (document.compatMode == “CSS1Compat”) {
windowHeight = document.documentElement.clientHeight;
} else {
windowHeight = document.body.clientHeight;
}
return windowHeight;
}
//滚动条滚动高度
function getScrollHeight() {
var
scrollHeight = 0,
bodyScrollHeight = 0,
documentScrollHeight = 0;
if (document.body) {
bodyScrollHeight = document.body.scrollHeight;
}
if (document.documentElement) {
documentScrollHeight = document.documentElement.scrollHeight;
}
scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;
return scrollHeight;
}
window.onscroll = function () {
//监听事件内容
if (getScrollHeight() == getWindowHeight() + getDocumentTop()) {
//当滚动条到底时,这里是触发内容,异步请求数据,局部刷新dom
console.log(“开始滚动!”);
}
}

function scroll() {
//文档高度
var
scrollTop = 0,
bodyScrollTop = 0,
documentScrollTop = 0;
if (document.body) {
bodyScrollTop = document.body.scrollTop;
}
if (document.documentElement) {
documentScrollTop = document.documentElement.scrollTop;
}
scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
//可视窗口高度
var windowHeight = 0;
if (document.compatMode == “CSS1Compat”) {
windowHeight = document.documentElement.clientHeight;
} else {
windowHeight = document.body.clientHeight;
}
//滚动条滚动高度
var
scrollHeight = 0,
bodyScrollHeight = 0,
documentScrollHeight = 0;
if (document.body) {
bodyScrollHeight = document.body.scrollHeight;
}
if (document.documentElement) {
documentScrollHeight = document.documentElement.scrollHeight;
}
scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;

if (scrollHeight == windowHeight + scrollTop) {
	//当滚动条到底时,这里是触发内容,异步请求数据,局部刷新dom
	// console.log("开始滚动!");
	return true
}
return false

}
window.onscroll = function () {
//监听事件内容
if (scroll()) {
//当滚动条到底时,这里是触发内容,异步请求数据,局部刷新dom
console.log(“开始滚动!”);
}
}

if (res.code == 404) {
location.href = ‘…/login.html?status=1’
} else

function formatDate(value) {
let date = new Date(value)
let y = date.getFullYear()
let m = date.getMonth() + 1
let d = date.getDate()
y = y < 10 ? (‘0’ + y) : y
m = m < 10 ? (‘0’ + m) : m
d = d < 10 ? (‘0’ + d) : d
return y + ‘.’ + m + ‘.’ + d
}

var list=res.data
for(var i in list){
list[i].add_time=formatDate((list[i].add_time)*1000)
}

//手机端web页面自适应

/* 手机端 */ @media screen and (max-width:768px) { html { /* 相当于100px */ background-color: #f1f1f1; font-size: 13.33333vw; } }

//手机web长按触发事件
var timeOutEvent = 0;
function touchstart(obj) {
timeOutEvent = setTimeout(function () {
//此处为长按事件-----在此显示遮罩层及删除按钮
console.log(“长按事件触发发” );
}, 500);
}
function touchend() {
clearTimeout(timeOutEvent);
}

//打印26个字母
for(let code =65;code<91;code++){
console.log(String.fromCharCode(code))
}

ES6
//ES6复制数组//合并数组concat()和rest
//复制数组
(方法一:)
var arr1=[‘a’,‘b’,‘c’,‘d’];
var cc=arr1.concat();
cc[1]=‘yy’;
console.log(arr1);//[“a”, “b”, “c”, “d”]
console.log(cc);//[“a”, “yy”, “c”, “d”]
(方法二:)
var arr1=[‘a’,‘b’,‘c’,‘d’];
var dd=[…arr1];
dd[0]=‘es6’;
console.log(dd);//[“es6”, “b”, “c”, “d”]
console.log(arr1);//[“a”, “b”, “c”, “d”]
//合并数组
(方法一:)
var arr1=[‘a’,‘b’,‘c’,‘d’];
var arr2=[‘d’];
var arr3=[‘e’,‘f’];
var cc=arr1.concat(arr2,arr3);
console.log(cc);//[“a”, “b”, “c”, “d”, “d”, “e”, “f”]
(方法二:)
var arr1=[‘a’,‘b’,‘c’,‘d’];
var arr2=[‘d’];
var arr3=[‘e’,‘f’];
var dd=[…arr1,…arr2,…arr3];
console.log(dd);//[“a”, “b”, “c”, “d”, “d”, “e”, “f”]

//ES6:map映射数组映射
1、将一个普通数组映射为对象数组

将[1,2,3] 映射为 [{id: 1}, {id: 2}, {id: 3}]

var arr=[1,2,3];
arr=arr.map(item=> { // item是数组中的每一个值
	return {id:item}
})
console.log(arr); //[{id: 1}, {id: 2}, {id: 3}]

3.将一个对象数组映射为另一个对象数组

attachmentList是一个对象数组,需要其中的属性转换为另外一个对象数组fileList,如下:

this.fileList = this.attachmentList.map(item=>{
      return {id:item.id,name:item.fileName,url:item.filePath}
});

…/assets/

<el-pagination
layout=“prev, pager, next”
:total=“count”
@current-change=“current_change”
@prev-click=“prev_click”
@next-click=“next_click”
>

          count:0,
		  
		  this.count=Number(data.data)

current_change(val){

  },
  prev_click(val){

  },
  next_click(val){

  },

//Android的签名文件生成
1.通过这段命令直接进入jdk bin文件夹下面 cd C:\Program Files\Java\jdk1.8.0_91\bin
2.再输入keytool命令行
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:19:17  更:2021-10-26 12:20:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:47:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码