将对象输出到Logcat控制台

时间:2016-04-23 18:06:20

标签: android logging

我想看看一个对象,类似于php中的{ "usage": [ "<command> [<args>] [<options>]" ], "commands": { "cache": "Manage bower cache", "help": "Display help information about Bower", "home": "Opens a package homepage into your favorite browser", "info": "Info of a particular package", "init": "Interactively create a bower.json file", "install": "Install a package locally", "link": "Symlink a package folder", "list": "List local packages - and possible updates", "login": "Authenticate with GitHub and store credentials", "lookup": "Look up a package URL by name", "prune": "Removes local extraneous packages", "register": "Register a package", "search": "Search for a package by name", "update": "Update a local package", "uninstall": "Remove a local package", "unregister": "Remove a package from the registry", "version": "Bump a package version" }, "options": [ { "shorthand": "-f", "flag": "--force", "description": "Makes various commands more forceful" }, { "shorthand": "-j", "flag": "--json", "description": "Output consumable JSON" }, { "shorthand": "-l", "flag": "--loglevel", "description": "What level of logs to report" }, { "shorthand": "-o", "flag": "--offline", "description": "Do not hit the network" }, { "shorthand": "-q", "flag": "--quiet", "description": "Only output important information" }, { "shorthand": "-s", "flag": "--silent", "description": "Do not output anything, besides errors" }, { "shorthand": "-V", "flag": "--verbose", "description": "Makes output more verbose" }, { "flag": "--allow-root", "description": "Allows running commands as root" }, { "shorthand": "-v", "flag": "--version", "description": "Output Bower version" }, { "flag": "--no-color", "description": "Disable colors" } ] } ,或javascript中的print_r(an_object)(在浏览器中),但是对于Android。

我试过这个

console.log(an_object)

这会生成错误消息:

  

错误:(23,10)错误:没有为d找到合适的方法(String,View)   方法Log.d(String,String,Throwable)不适用   (实际和正式的参数列表长度不同)   方法Log.d(String,String)不适用   (实际参数View不能通过方法调用转换转换为String)

5 个答案:

答案 0 :(得分:14)

您无法像在javascript中那样在Java中将对象打印到控制台。

你有三个解决方案。

1)使用调试器。在android studio中放置断点并调试。然后,您可以检查范围内的完整对象。

2)序列化您的对象(例如,JSON)并将结果打印到控制台。

3)覆盖对象的toString方法,为您提供所需的所有信息并致电Log.d("myTag", yourObj.toString())

我强烈推荐第一种方法。我曾经避免调试器,但学习如何使用调试器是我做的最好的事情。它可以提高您的效率并使调试非常简单

答案 1 :(得分:6)

第二个参数必须是String。

Log.d("an_id", String.valueOf(the_arg));

您的错误表明您无法记录View课程

  

没有为d(String,View)找到合适的方法

当您使用View

打印String.valueOf对象时,在控制台中看到一些废话时不要感到惊讶

答案 2 :(得分:1)

将对象转换为JSON。您可以使用Gson。

val gson = Gson()
val json = gson.toJson(yourObject)
Log.e(TAG, json)

Log.e(TAG, Gson().toJson(yourObject))

答案 3 :(得分:1)

在logcat中输出数据对象有点容易。

正确的方法是在对象内override toString()。 它可以由Android Studio本身按照以下简单步骤生成:

1-打开DataClass

2-按Alt + Insert或右键单击并单击Generate...

3-在“生成”窗口中,选择toString()

4-在下一个窗口中选择所有变量,然后单击OK

5- toString()方法将在您的数据类中override返回数据模型的String模板。

干杯!

答案 4 :(得分:0)

只写了一种通用方法,这使得通过槽反射成为可能:

@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    for (Field field : this.getClass().getDeclaredFields()) {
        String item;
        if(! field.getType().getSimpleName().equals("ArrayList")) {
            try {
                Object value = field.get(this);
                item = String.format("%s %s %s: %s%n", Modifier.toString(field.getModifiers()), field.getType().getSimpleName(), field.getName(), String.valueOf(value));
                sb.append(item);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } else {
            item = String.format("%s %s %s: ArrayList<>%n", Modifier.toString(field.getModifiers()), field.getType().getSimpleName(), field.getName());
            sb.append(item);
        }
    }
    return sb.toString();
}