美文网首页85107915953c
Android AutoSearchBug自动捕获异常,联网查询

Android AutoSearchBug自动捕获异常,联网查询

作者: 写BUG的张永 | 来源:发表于2018-07-03 16:59 被阅读0次

AutoSearchBug

原文连接:http://9aiplay.com/record/AutoSearchBug/
我的Github:https://github.com/SHPDZY
我的博客:http://9aiplay.com/


这是一款可以在项目崩溃时获取异常
自动联网在Stack Overflow,百度或其他平台上寻找回答链接和详情

原理

android通过UncaughtExceptionHandler来实现获取应用全局的crash信息
启动一个服务来完成联网查找回答

Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(final Thread thread, final Throwable ex) {
        String errorMsg = getErrorMsg(ex);
        Intent intent = new Intent(mApp, AutoSearchBugService.class);
        intent.putExtra(ERROR_MSG, errorMsg);
        intent.putExtra(MAX_SIZE, maxSize);
        intent.putExtra(SHOW_ANSWER, showAnswer);
        intent.putExtra(SEARCH_TYPE, searchType);
        mApp.startService(intent);
        mUEH.uncaughtException(thread, ex);
    }
};

public class AutoSearchBugService extends Service implements AutoSearchBugGlobal {
    
    ···

    private void search(final String errorMsg, int maxSize, final int showAnswer, int searchType) {
        AutoSearchBugHttpUtil.doGet(
                        AutoSearchBugAPI.SEARCH_URL + 
                        AutoSearchBugAPI.PAGE_SIZE + maxSize +
                        AutoSearchBugAPI.ERROR_MSG + errorMsg.replace(" ", "%20") +
                        AutoSearchBugAPI.SHOW_ANSWER + showAnswer + 
                        AutoSearchBugAPI.SEARCH_TYPE + searchType,
                new AutoSearchBugHttpUtil.HResponse() {
                    @Override
                    public void onStart() {
                        StringBuffer log = new StringBuffer();
                        log.append(LINE_START);
                        log.append(SEARCHING);
                        log.append(LINE_END);
                        log(log);
                    }

                    @Override
                    public void onFinish(String msg) {
                        resolveLog(msg, errorMsg, showAnswer);
                        stopSelf();
                    }

                    @Override
                    public void onError(String error) {
                        StringBuffer log = new StringBuffer();
                        log.append(String.format(ASB_ERROR, error));
                        log.append(LINE_END);
                        log(log);
                        stopSelf();
                    }
                });
    }

···

}

服务端通过Jsoup来解析html

@RestController
@RequestMapping("/android")
@Api("android接口")
public class SearchBugApi {
    
    ···

    /**
     * 通过errorMsg来查找回答
     * @param page          获取几条数据
     * @param errorMsg      crash信息
     * @param showAnswer    是否显示回答详情
     * @param type          0搜索stackoverflow 1搜索baidu
     * @return
     */
    @GetMapping("autosearchbug")
    public R autosearchbug(int page, String errorMsg, int showAnswer, int type) {
        switch (type) {
            case 0:
                return getStackOverFlow(page, errorMsg, showAnswer);
            case 1:
                return getBD(page, errorMsg);
            default:
                return getStackOverFlow(page, errorMsg, showAnswer);
        }

    }
    
    private R getStackOverFlow(int page, String errorMsg, int showAnswer) {
        String url = "https://stackoverflow.com/search?q=" + errorMsg;
        List<AutoSearchBugEntity> autoSearchBugList = new ArrayList();
        try {
            Document doc = Jsoup.connect(url).get();
            ···
            return R.ok().putData(autoSearchBugList);
        } catch (IOException e) {
            e.printStackTrace();
            return R.error(e.getMessage());
        }
    }


    ···
    
}

如何引入

Android Studio 引入

第1步 将JitPack存储库添加到您的构建文件

将其添加到存储库末尾的根build.gradle中:

   allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

第2步 添加依赖关系

    dependencies {
           implementation 'com.github.SHPDZY:AutoSearchBug:1.0.1'
    }

Eclipse 引入

建议使用As,方便版本更新。

    dependencies {
           compile project(path: ':AutoSearchBug')
    }

如何使用

    AutoSearchBugControl.getBuilder()
            .setMaxSize(3)    //显示数量
            .showAnswer(true) //true显示回答详情
            .setSearchType(0) //0在stackoverflow搜索  1:在百度搜索
            .init();

效果图

默认初始化未显示回答详情


效果图

自定义初始化显示详情


效果图

原文连接:http://9aiplay.com/record/AutoSearchBug/
我的Github:https://github.com/SHPDZY
我的博客:http://9aiplay.com/

相关文章

  • Android AutoSearchBug自动捕获异常,联网查询

    AutoSearchBug 原文连接:http://9aiplay.com/record/AutoSearchBu...

  • 如何捕获JS中的异常

    手动捕获异常 自动捕获

  • Android 如何捕获崩溃异常并重启应用

    第一种方法:通过AppUncaughtExceptionHandler来捕获异常 Android全局捕获崩溃异常记...

  • Android 捕获异常

    在市面上有很多异常捕获SDK,比如bugly,友盟等。今天记录一个自定义全局捕获异常功能。 主要用到的是Threa...

  • android异常捕获

    android异常分为两种,一种是java代码导致的异常,一种是Native异常. 在java代码异常中,主要是出...

  • django 小记

    学会异常捕获 当程序出现问题时,学会使用异常捕获,such as:查询结果集中没有想要的查的对象或字段,返回xxD...

  • android so库导致的闪退及tombstone分析

    android中有3种crash情况:未捕获的异常、ANR和闪退。未捕获的异常一般用crash文件就可以记录异常信...

  • Android异常崩溃捕获

    Android系统碎片化造成应用程序崩溃严重,在模拟器上运行良好的程序安装到某款手机上说不定就会出现崩溃的现象。而...

  • Android全局异常捕获

    稳定性测试是保障客户端稳定性的一种手段,致力于提前发现问题,收集更多异常信息,复现线上闪退。当Android客户端...

  • Android全局异常捕获

    重点 1.对未手动捕获异常的处理类 制作成单例类(因为整个应用程序中,只需要一个异常捕获类就够了) 类实例中保存了...

网友评论

    本文标题:Android AutoSearchBug自动捕获异常,联网查询

    本文链接:https://www.haomeiwen.com/subject/wydjuftx.html