【达内课程】异常处理工具类、Log打印工具类、网络变化工具类

    xiaoxiao2022-07-05  156

    ExceptionUtil

    public class ExceptionUtil { public static void handleException(Throwable throwable){ if(MyApplication.isRelease){ //把异常信息转成字符串 StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); throwable.printStackTrace(printWriter); String str = stringWriter.toString(); //联网发送 }else { //开发阶段 ExceptionUtil.handleException(throwable); } } }

    其中MyApplication.isRelease是定义在MyApplication中的变量,用来表示是否是发布版本,在真正发布时,置为true

    //release:发布版本 public static boolean isRelease = false;

    LogUtil

    Log输出也不能随便用,耗时,可以通过两个栗子看一下

    long start = System.currentTimeMillis(); int sum = 0; for(int i=0;i<10000;i++){ sum++; } long end = System.currentTimeMillis() - start; Log.i("TIME",sum+" 用时:"+end);

    I/TIME: 10000 用时:1

    long start = System.currentTimeMillis(); int sum = 0; for(int i=0;i<10000;i++){ sum++; Log.i("TIME",sum+" 用时:"+ (System.currentTimeMillis() - start)); }

    I/TIME: 9998 用时:201 I/TIME: 9999 用时:201 I/TIME: 10000 用时:201

    因此我们写一个LogUtil

    public class LogUtil { public static void i(String tag,Object msg){ if(MyApplication.isRelease){ //真机上不打印日志 return; }else { Log.d(tag,String.valueOf(msg)); } } }

    Toast

    在工作中应该新建一个toast方法,以便统一修改toast样式

    public static void showInfo(Context context, String msg){ ..... }

    其他toast教程:Android自定义Toast的时长、位置、及显示的View

    NetworkUtil

    添加权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    NetworkUtil

    public class NetworkUtil { public static void checkNetworkState(final Activity activity){ //判断有没有网 ConnectivityManager manager = (ConnectivityManager)activity.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); //没有活动网络 if(networkInfo == null){ final AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage("没网"); builder.setPositiveButton("打开网络", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); activity.startActivity(intent); } }); builder.setNegativeButton("取消", null); builder.show(); } } }

    使用时在onCreate()中

    NetworkUtil.checkNetworkState(this);

    NetworkStateChangeReceiver

    NetworkStateChangeReceiver

    public class NetworkStateChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { NetworkUtil.checkNetworkType(context); } }

    AndroidManifest中注册

    <receiver android:name=".util.NetworkStateChangeReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver>

    MyApplication

    public class MyApplication extends Application { public static boolean networkIsClose = false; public static boolean networkIsMobile = false; public static boolean networkIsWifi = false; ...... @Override public void onCreate() { super.onCreate(); //得网络状态 NetworkUtil.checkNetworkType(this); ...... } }

    NetworkUtil中增加方法

    public static void checkNetworkType(Context context) { //判断用户是开网还是关网 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); if (info == null) { //关网 MyApplication.networkIsClose = true; MyApplication.networkIsWifi = false; MyApplication.networkIsMobile = false; LogUtil.i("网络", "用户关闭了网络"); } else { //用户开网 MyApplication.networkIsClose = false; //判断网络类型 //移动网 NetworkInfo networkMobile = manager.getNetworkInfo(manager.TYPE_MOBILE); if (networkMobile != null && networkMobile.isConnectedOrConnecting()) { MyApplication.networkIsMobile = true; LogUtil.i("网络", "用户打开了网络,网络类型是移动网"); } //wifi NetworkInfo networkWifi = manager.getNetworkInfo(manager.TYPE_WIFI); if (networkWifi != null && networkWifi.isConnectedOrConnecting()) { MyApplication.networkIsWifi = true; LogUtil.i("网络", "用户打开了网络,网络类型是wifi"); } } }

    android.net.conn.CONNECTIVITY_CHANGE广播无法接收的问题

    最新回复(0)