Android操作不当遇到的异常
作者:互联网
1.在Activity组件启动里有网络操作: NetworkOnMainThreadException
原因: 一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。
解决办法:
①简单暴力,强制使用,代码修改简单(但是非常不推荐)
//在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } |
②创建一个子线程去做这件事情
2.如何在手机里安装多个不同版本的apk
①修改build.gradle
debug { //这里写的是这个版本的id applicationIdSuffix "debug" } |
②修改Manifest.xml文件的名称
3.导入别人的项目
①删除
、
②然后打开项目
他会提示你更新,千万不要更新
4.module导入
依次点击File–>new–>Import Module:点击导入会报错,不用理他去;在settings.gradle文件里加上要导入的模型
然后再close报出来的错误就行了
5.正式版(release)apk打包过程
参考连接:
https://www.cnblogs.com/gao-chun/p/4891275.html
https://blog.csdn.net/sinat_29384657/article/details/79298287
6.更换app图标
https://www.cnblogs.com/whycxb/p/9096727.html
7.启动程序判断是否有网
方法1(wifi连接没网络监测不了,还有华为部分手机出现闪退情况)
/** * 函数名称:getNetworkStatus * 功能:判断是否有网 * @param: [] * @return: boolean * @exception: * @author: sxl * @version: */ public boolean getNetworkStatus(){ boolean networkFlag = false; //获取网络参数类 ConnectivityManager manager = (ConnectivityManager)getSystemService(MainActivity.CONNECTIVITY_SERVICE); //是否有运营商网络 NetworkInfo.State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState(); //是否有wifi NetworkInfo.State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); //运营商网络状态 if(mobile == NetworkInfo.State.CONNECTED||mobile== NetworkInfo.State.CONNECTING){ //有网 networkFlag = true; }
//wifi状态 if(wifi == NetworkInfo.State.CONNECTED||wifi== NetworkInfo.State.CONNECTING){ networkFlag = true; } return networkFlag; }
方法二 ping 百度网站(可行(ping3次app会出现闪屏现象))
/* @author suncat * @category 判断是否有外网连接(普通方法不能判断外网的网络是否连接,比如连接上局域网) * @return */ public static final boolean ping() {
String result = null; try { String ip = "www.baidu.com";// ping 的地址,可以换成任何一种可靠的外网 Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);// ping网址3次 // 读取ping的内容,可以不加 InputStream input = p.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(input)); StringBuffer stringBuffer = new StringBuffer(); String content = ""; while ((content = in.readLine()) != null) { stringBuffer.append(content); } Log.d("------ping-----", "result content : " + stringBuffer.toString()); // ping的状态 int status = p.waitFor(); if (status == 0) { result = "success"; return true; } else { result = "failed"; } } catch (IOException e) { result = "IOException"; } catch (InterruptedException e) { result = "InterruptedException"; } finally { Log.d("----result---", "result = " + result); } return false; }
方法3 ping1次(没有发现问题)
public static boolean isNetWorkAvailable() { Runtime runtime = Runtime.getRuntime(); try { Process pingProcess = runtime.exec("/system/bin/ping -c 1 www.baidu.com"); int exitCode = pingProcess.waitFor(); return (exitCode == 0); } catch (Exception e) { e.printStackTrace(); } return false; } 方法4 可以get请求(没试过)
URL url = new URL("http://www.google.com"); HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); urlc.setConnectTimeout(3000); urlc.connect(); if (urlc.getResponseCode() == 200) { return new Boolean(true); } |
标签:return,遇到,NetworkInfo,ping,State,result,不当,new,Android 来源: https://blog.csdn.net/s337946745/article/details/113898476