int index = -1; while ((index = inputStream.read(bytes))!=-1&&uploading){ out.write(bytes,0,index);//用这个 //out.write(bytes);//不要用这个 }
Android应用是否安装判断
另外manifest里面需要添加
<queries> <package android:name="com.edutech.liveapp"/> </queries>
private boolean isAppInstalled(Context context, String packagename) { PackageInfo packageInfo; try { packageInfo = context.getPackageManager().getPackageInfo(packagename, 0); }catch (PackageManager.NameNotFoundException e) { packageInfo = null; e.printStackTrace(); // Toast.makeText(this,packagename+":"+e.getMessage(),Toast.LENGTH_LONG).show(); } if(packageInfo ==null){ //System.out.println("没有安装"); return false; }else{ //System.out.println("已经安装"); return true; } }
最大连续乘积子串
/**
* 常规穷举法
*/
fun maxContinueProduce_fun1(intAttrs: MutableList): Double {
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxValue = intAttrs[0] var minIndex = 0 var maxIndex = 0 for (i in 0..intAttrs.size-1) { var value = intAttrs[i] for (j in i+1..intAttrs.size-1) { value = value * intAttrs[j] if (value>maxValue) {
maxValue = value
minIndex = i
maxIndex = j
}
}
}
println(“value:”+maxValue+”,min:”+minIndex+”,max:”+maxIndex)
return maxValue
}
/**
* 乘积可以为0,负数和正数
* 负数乘负数得正,也可能产生最大乘积
*/
fun maxContinueProduce_fun2(intAttrs: MutableList): Double{
if (intAttrs==null || intAttrs.size<=0) { return 0.0 } var maxProduce = 1.0 var minProduct = 1.0 var maxCurrent = maxProduce var minCurrent = minProduct var index = 0 var minindex = 0 // 找到最大乘积 已经最大index for (i in 0..intAttrs.size-1) { maxCurrent = intAttrs[i]*maxCurrent minCurrent = intAttrs[i]*minCurrent if (maxCurrent>maxProduce) {
maxProduce = maxCurrent
index = i
}
if (minCurrent>maxProduce) {
maxProduce = minCurrent
index = i
}
if (maxCurrent<minProduct) {
minProduct = maxCurrent
}
if (minCurrent<minProduct) { minProduct = minCurrent } if (minCurrent>maxCurrent) {
var temp = minCurrent
minCurrent = maxCurrent
maxCurrent = temp
}
if (maxCurrent<1) {
maxCurrent = 1.0
}
}
// 通过最大index和最大乘积计算最小index
var temp = 1.0
for (i in index downTo 0) {
temp *= intAttrs[i]
if (temp==maxProduce) {
minindex=i
break
}
}
println(“value:”+maxProduce+”,min:”+minindex+”,max:”+index)
return maxProduce
} Continue reading “最大连续乘积子串”
字符串编辑距离:计算最小操作数
/**
* 首先用0填充attrs[i][j],生成距离存储集合
* 先将最大距离填充到行首和列首
* 如果s[i-1]==t[j-1]则编辑距离不需要增加,editAttrs[i][j]==editAttrs[i-1][j-1]
* 如果二者不相等,则取前面三种编辑方式中最小距离加1,因为只需要在上一步最优方式中操作一次(增加/删除/补空)就可以
* editAttrs[i][j] = min(editAttrs[i-1][j-1],editAttrs[i][j-1],editAttrs[i-1][j])
*/
fun minStepForEdit(sourceStr: String, targerStr: String): Int {
var stepCount = 0
var editAttrs = mutableListOf<MutableList>()
println(sourceStr)
println(targerStr)
// 如果i从sourceStr开始,则下方双for循环也需要从sourceStr开始
// 如果i从targetStr开始,则下方双for循环也需要从targetStr开始
// 这二者对应就可以
for (i in 0..targerStr.length) {
var tempMulti = mutableListOf()
for (j in 0..sourceStr.length) {
tempMulti.add(0)
}
editAttrs.add(tempMulti)
}
for (i in 0..targerStr.length) {
editAttrs[i][0] = i
}
for (i in 0..sourceStr.length) {
editAttrs[0][i] = i
}
for (i in 1..targerStr.length) {
for (j in 1..sourceStr.length) {
if (targerStr[i-1].equals(sourceStr[j-1])) {
editAttrs[i][j] = editAttrs[i-1][j-1]
} else {
var count = if (editAttrs[i][j-1]>editAttrs[i-1][j]) {
if (editAttrs[i-1][j-1]<editAttrs[i-1][j]) {
editAttrs[i-1][j-1] + 1
} else {
editAttrs[i-1][j] + 1
}
} else {
if (editAttrs[i-1][j-1]<editAttrs[i][j-1]) {
editAttrs[i-1][j-1] + 1
} else {
editAttrs[i][j-1] + 1
}
}
editAttrs[i][j] = count
}
}
}
stepCount = editAttrs[targerStr.length][sourceStr.length]
editAttrs.forEach {
var values = it
values.forEach {
print(it)
print(” “)
}
println()
}
return stepCount
}
Android WebView内跳转链接
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onCreateWindow(WebView webView, boolean b, boolean b1, Message message) {
Log.e(“webview”,”onCreateWindow:”+b+”,”+b1);
Log.e(“webview”,”onCreateWindow:”+webView.getUrl());
WebView.WebViewTransport transport = (WebView.WebViewTransport) message.obj;
transport.setWebView(mWebView); //此webview可以是一般新创建的
message.sendToTarget();
return false;
}
});
查找一个数值中最小的N个数
fun queryMinK(arrs: MutableList
var min = 0;
var smallTemp = arrs[0]
for (i in 0..k-1) {
smallTemp = arrs[i]
var smallIndex = i
for (j in k..arrs.size-1) {
if (smallTemp>arrs[j]) {
smallIndex = j
smallTemp = arrs[j]
}
}
if (smallIndex!=i) {
var temp = arrs[i]
arrs[i] = arrs[smallIndex]
arrs[smallIndex] = temp
}
}
}
Kotlin与Java混编,ButterKnife编译异常
1、nullpoint
针对此问题,只需将annotationProcessor com.jakewharton:butterknife-compiler:x.x.x
改为apt com.jakewharton:butterknife-compiler:x.x.x即可
kotlin项目:
plugins {
id ‘com.android.application’
id ‘kotlin-android’
id ‘kotlin-kapt’
}
2、https://blog.csdn.net/lky199024/article/details/75309776
3、如果配置都正常有可能是转AndroidX之后,使用了AppcompatActivity,但是manifest文件的style不是Appcompat
Android UDP广播地址
1、如果手机开热点,广播地址“192.168.43.255”
或者通过连接热点设备的IP来判断广播地址。
2、如果连接Wi-Fi
@Throws(UnknownHostException::class)
fun getBroadcastAddress(context: Context): InetAddress? {
val wifi = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
val dhcp = wifi.dhcpInfo ?: return InetAddress.getByName(“255.255.255.255”)
val broadcast = dhcp.ipAddress and dhcp.netmask or dhcp.netmask.inv()
val quads = ByteArray(4)
for (k in 0..3) quads[k] = (broadcast shr k * 8 and 0xFF).toByte()
return InetAddress.getByAddress(quads)
}
平板刷机
YJ-W10擦除异常:如果平板系统是Android5.1用2.35版本,Android7.1用2.42
视频转换工具
1、VLC播放器可以转换视频;
2、MacX Video Converter Pro可以转换。
碰到一个h265格式视频,直接用converter无法转换成功。
方法:先用VLC转换成mp4(mkv格式),然后再用converter将mkv格式转换成标准MP4