其他分享
首页 > 其他分享> > Android操作不当遇到的异常

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