阅读的logcat内的应用程序返回null [英] Reading Logcat within the app returns null

查看:93
本文介绍了阅读的logcat内的应用程序返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读其他职位,不能计算出绝招。

I read the other posts and can't figure out the "trick".

我看着日志收集,但不能使用单独的APK。我基本上用同样的方法,我一直得到任何回报的过程的InputStream。

I looked at Log Collector but can't use a separate APK. I'm basically using the same approach and I consistently get nothing back on the processes inputstream.

我在清单READ_LOGS。

I have READ_LOGS in the manifest.

这是在我的默认行为,我能够得到日志,但如果我将逻辑到另一个活动或利用一个AsyncTask的,则不会返回任何输出。

From within my default activity, I'm able to get the log, but if I move the logic to another activity or utilize an asynctask, no output is returned.

这code是我的默认行为......行内,我转储到日志中

this code is from my default activity... inline, i dump it to the log

 try {
    Process process = Runtime.getRuntime().exec("logcat -d");
       BufferedReader bufferedReader = new BufferedReader(
       new InputStreamReader(process.getInputStream()));

    StringBuilder log=new StringBuilder();
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        log.append(line);
    }
    Log.d(LOGTAG, "Logcat: " +log.toString());
 } catch (IOException e) {}

如果我把它包在AsyncTask的或只是内嵌在另一个活动,它没有返回值

if i wrap it in an asynctask or just inline it in another activity, it returns nothing

    ArrayList<String> commandLine = new ArrayList<String>();
    //terminate on completion and suppress everything except the filter
    commandLine.add("logcat -d -s");
       ...
    //replace asynctask with inline (could not get log in asynctask)
    showProgressDialog(getString(R.string.acquiring_log_progress_dialog_message));
    final StringBuilder log = new StringBuilder();
    BufferedReader bufferedReader = null;
    try{

        Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[0]));
        bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        String line;
        while ((line = bufferedReader.readLine()) != null){ 
            log.append(line);
            log.append(MangoApp.LINE_SEPARATOR); 
        }


        sendIntent.putExtra(Intent.EXTRA_TEXT, log.toString());
        startActivity(Intent.createChooser(sendIntent, getString(R.string.chooser_title)));
        dismissProgressDialog();
        dismissMainDialog();
        finish();           
    } 
    catch (IOException e){
        dismissProgressDialog();
        showErrorDialog(getString(R.string.failed_to_get_log_message));
        Log.e(LOGTAG, "Log collection failed: ", e);//$NON-NLS-1$
    } finally {
        if (bufferedReader != null) {
            try {
                bufferedReader.close();
            } catch (IOException ignore) {}
        }
    }

任何人都可以当场差异或解释的魔力?我是pretty的确定命令行是正确的,第二个版本,所以抓我的头。我使用的是2.1 SDK 7上模拟器。

Can anyone spot the diff or explain the magic? I'm pretty sure the commandline is right in the second version so scratching my head. I'm using 2.1 SDK 7 on the emulator.

感谢

推荐答案

您可以尝试没有ArrayList中。只是通过命令字符串 我已经按以下方式实现它(不ArrayList中)。这对我的作品。

Can you try it without the ArrayList. Just pass the command String I have implemented it in the following way (without the ArrayList). It works for me.

        String baseCommand = "logcat -v time";
        baseCommand += " MyApp:I "; // Info for my app
        baseCommand += " *:S "; // Silence others

        ServicesController.logReaderProcess = Runtime.getRuntime().exec(baseCommand);

这篇关于阅读的logcat内的应用程序返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆