Uri.toString()返回一个引用而不是String

时间:2011-08-11 07:28:40

标签: android string reference uri

尝试在Android Activity中执行此代码时:

Uri testurl = Uri.parse("http://www.google.com");
Log.v("HTTPGet", "testurl.toString == " + testurl.toString());

Logcat中唯一的输出是对字符串的引用,但不是字符串本身:

HTTPGet(23045): testurl.toString == [Landroid.net.Uri;@4056e398

如何打印实际字符串?

2 个答案:

答案 0 :(得分:6)

在Uri上调用getEncodedPath()以获取其中的字符串。

如下所示

// imageUri is an Uri extracted from Intent 
String filePath = imageUri.getEncodedPath();

此filePath将具有Uri中定义的字符串内容。即content:/ media ... / id

词shash

答案 1 :(得分:3)

原创回答(抓它)

Uri.toString从类Uri中写出URI对象的描述。

文档在这里:http://developer.android.com/reference/android/net/Uri.html

要获得人类可读的版本,请调用为该类定义的getter方法。

真正的答案

OP已澄清并提供了实际代码。以下是实际情况:

@Override
protected Document doInBackground(Uri... arg0) {
    Document ret = null;
    Log.v("HTTPGet", "Uri.toString == " + arg0.toString());
    try {
        ret = Jsoup.connect(arg0.toString()).get();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return ret;
}

这里发生的是参数arg0的类型为Uri[],即数组Uri 。点 - 点点语法是Java的“varargs”。这意味着参数实际上是一个数组,但是不是在调用中传递数组,而是可以传递Java将捆绑到数组中的任意数量的参数。

因为您使用的是第三方库,所以必须覆盖此方法,该方法包含一个或更多 Uris。您假设只使用一个。如果是这种情况,你应该写

Log.v("HTTPGet", "Uri.toString == " + arg0[0].toString());

如果你真的要处理多个uris,请使用for循环来记录所有这些uris。

确保修复Jsoup.connect行。它不需要凌乱的数组字符串。 :)