package com.hdl.photovoltaic.other;
|
|
import android.app.Dialog;
|
import android.content.Context;
|
import android.os.Handler;
|
import android.os.Looper;
|
import android.util.Log;
|
import android.widget.Toast;
|
|
import androidx.appcompat.app.AlertDialog;
|
|
import com.hdl.photovoltaic.enums.ShowErrorMode;
|
import com.hdl.photovoltaic.widget.ConfirmationDialog;
|
import com.hdl.photovoltaic.widget.ConfirmationExceptionDialog;
|
|
/**
|
* 线程逻辑
|
*/
|
public class HdlThreadLogic {
|
private static final Handler handler = new Handler(Looper.getMainLooper());
|
|
|
/**
|
* 切换回主线程执行
|
*
|
* @param run 回调
|
* @param context 上下文(不需要弹框填null)
|
* @param showErrorMode 是否显示错误(不需要显示错误填null)
|
*/
|
public static void runMainThread(Runnable run, Context context, ShowErrorMode showErrorMode) {
|
try {
|
if (Looper.myLooper() == Looper.getMainLooper()) {
|
run.run();
|
} else {
|
handler.post(run);
|
}
|
} catch (Exception e) {
|
|
exception(e, showErrorMode, context);
|
}
|
}
|
|
|
/**
|
* 子线程执行
|
*
|
* @param run 回调
|
* @param context 上下文(不需要弹框填null)
|
* @param showErrorMode 是否显示错误(不需要填null)
|
*/
|
public static void runThread(Runnable run, Context context, ShowErrorMode showErrorMode) {
|
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
run.run();
|
} catch (Exception e) {
|
exception(e, showErrorMode, context);
|
}
|
}
|
}).start();
|
|
}
|
|
|
/**
|
* 全局弹出框,系统默认Toast
|
*/
|
public static void toast(final Context context, final String text) {
|
handler.post(new Runnable() {
|
@Override
|
public void run() {
|
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
|
}
|
});
|
}
|
|
/**
|
* 全局弹出框,系统默认Toast
|
*/
|
public static void toast(final Context context, final int resId) {
|
handler.post(new Runnable() {
|
@Override
|
public void run() {
|
Toast.makeText(context, resId, Toast.LENGTH_SHORT).show();
|
}
|
});
|
}
|
|
|
/**
|
* @param ex 异常信息类
|
* @param context 上下文(不需要弹框填null)
|
* @param showErrorMode 是否显示错误(不需要填null)
|
*/
|
private static void exception(Exception ex, ShowErrorMode showErrorMode, Context context) {
|
if (showErrorMode == null || context == null || ex == null) {
|
return;
|
}
|
if (showErrorMode == ShowErrorMode.NO) {
|
return;
|
}
|
|
handler.post(new Runnable() {
|
@Override
|
public void run() {
|
|
ConfirmationDialog confirmationDialog = new ConfirmationDialog(context);
|
confirmationDialog.setTitle("提示");
|
confirmationDialog.setContent("很抱歉,程序出现错误了,点击\"确认\"获取更多详细错误信息.");
|
confirmationDialog.setConfirmation("确认");
|
confirmationDialog.setCancel("取消");
|
confirmationDialog.show();
|
confirmationDialog.setNoOnclickListener(new ConfirmationDialog.onNoOnclickListener() {
|
@Override
|
public void Cancel() {
|
confirmationDialog.dismiss();
|
}
|
});
|
confirmationDialog.setYesOnclickListener(new ConfirmationDialog.onYesOnclickListener() {
|
@Override
|
public void Confirm() {
|
confirmationDialog.dismiss();
|
ConfirmationExceptionDialog confirmationExceptionDialog = new ConfirmationExceptionDialog(context);
|
// String s = getStackTrace(ex);
|
String s = Log.getStackTraceString(ex);
|
confirmationExceptionDialog.setContent(s);
|
confirmationExceptionDialog.show();
|
}
|
});
|
|
}
|
});
|
}
|
|
/**
|
* @return 调用栈
|
*/
|
private static String getStackTrace(Exception ex) {
|
StringBuilder sb = new StringBuilder("");
|
StackTraceElement[] trace = ex.getStackTrace();
|
for (StackTraceElement stackTraceElement : trace) {
|
sb.append(stackTraceElement).append("\n");
|
}
|
return sb.toString();
|
}
|
|
}
|