Uri构建器返回混乱的URI

时间:2013-05-26 07:09:29

标签: android

所以,我正在尝试将ID参数附加到URI的末尾,当用户点击列表中的项目时,该URI将被发送到该URI。我的代码如下:

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
    Intent i = new Intent(Intent.ACTION_VIEW);
    //items.get(pos) returns the UPI needed. Append to http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=
    Uri.Builder b = Uri.parse("http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=").buildUpon();
    b.appendEncodedPath(items.get(pos));
    Uri uri = b.build();
    i.setData(uri);
    Log.d("URL of staff", uri.toString());
    activity.startActivity(i);      
}

现在,我应该得到一个形式的URI:

http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=pden001

例如,

。但是Logcat表明获得的URI实际上是

http://www.cs.auckland.ac.nz/our_staff/vcard.php/pden001?upi=

为什么将pden001追加到中间

我也尝试了appendPath()并获得了相同的结果,在这种情况下,Android Developer Tutorial不是很有帮助。

1 个答案:

答案 0 :(得分:1)

Uri构建器以不同于查询参数的方式处理基本URI,但您已将它们组合在此字符串中:

"http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi="

我认为您应该做的是将?upi=从字符串文字中删除,然后使用upi方法附加pden001参数和appendQueryParameter()值:

  //items.get(pos) returns the UPI needed. Append to http://www.cs.auckland.ac.nz/our_staff/vcard.php
  Uri.Builder b = Uri.parse("http://www.cs.auckland.ac.nz/our_staff/vcard.php").buildUpon();
  b.appendQueryParameter("upi", items.get(pos));
  Uri uri = b.build();
  i.setData(uri);