AndroidApp/ErrorDisplayUtil.java

71 lines
2.9 KiB
Java

package com.example.myapplication.Tool;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.graphics.Color;
import android.os.Handler;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
//测试时使用
public class ErrorDisplayUtil {
// 显示全量错误信息的对话框
public static void showErrorDialog(Activity activity, String title, String errorDetail) {
activity.runOnUiThread(() -> {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(title)
.setMessage(errorDetail)
.setPositiveButton("复制错误", (dialog, which) -> {
ClipboardManager clipboard = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("错误详情", errorDetail);
clipboard.setPrimaryClip(clip);
Toast.makeText(activity, "已复制到剪贴板", Toast.LENGTH_SHORT).show();
})
.setNegativeButton("关闭", null)
.show();
});
}
// 在界面上固定位置显示错误面板(建议放在登录按钮下方)
public static void showErrorPanel(Activity activity, String errorType, String solution) {
activity.runOnUiThread(() -> {
ViewGroup rootView = activity.findViewById(android.R.id.content);
// 创建错误面板
LinearLayout errorPanel = new LinearLayout(activity);
errorPanel.setOrientation(LinearLayout.VERTICAL);
errorPanel.setBackgroundColor(0x22FF0000); // 半透明红色背景
errorPanel.setPadding(16, 16, 16, 16);
TextView errorView = new TextView(activity);
errorView.setTextColor(Color.RED);
errorView.setText("⚠️ 错误类型: " + errorType);
TextView solutionView = new TextView(activity);
solutionView.setTextColor(Color.BLACK);
solutionView.setText("💡 解决方案: " + solution);
Button detailBtn = new Button(activity);
detailBtn.setText("查看技术详情");
detailBtn.setOnClickListener(v -> showErrorDialog(activity, "技术详情", errorType + "\n\n" + solution));
errorPanel.addView(errorView);
errorPanel.addView(solutionView);
errorPanel.addView(detailBtn);
// 添加到界面底部
rootView.addView(errorPanel);
// 5秒后自动隐藏
new Handler().postDelayed(() -> rootView.removeView(errorPanel), 5000);
});
}
}