我有一个 ID 列表,每个 ID 在单击时都链接到 vCard 的 Web URL。我的目标是当用户点击一个 ID 时,他将被带到一个显示 vCard 数据的新页面。所以 onItemClick,解析 vCard 数据,然后用解析后的 vCard 数据显示一个新视图。
我已经搜索过这个,但我找不到任何能够直接从网络导入并在我的应用程序中显示详细信息的东西。我能找到的所有教程似乎都必须经过将 vCard 数据下载到 SD 卡的步骤,然后才能从本地文件中解析数据。有没有办法在不通过 SD 卡的情况下做到这一点?
我的代码:
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
Intent i = new Intent(Intent.ACTION_VIEW);
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();
ContentResolver cr = activity.getContentResolver();
InputStream stream = null;
try {
stream = cr.openInputStream(uri);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StringBuffer fileContent = new StringBuffer("");
int ch;
try {
while( (ch = stream.read()) != -1)
fileContent.append((char)ch);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String data = new String(fileContent);
Log.i("TAG", "data: " + data);
}
}
给我一个例外:
05-26 11:29:09.723: W/System.err(781): java.io.FileNotFoundException: No content provider: http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=kng001
05-26 11:29:09.723: W/System.err(781): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:710)
05-26 11:29:09.733: W/System.err(781): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:614)
05-26 11:29:09.733: W/System.err(781): at android.content.ContentResolver.openInputStream(ContentResolver.java:449)
05-26 11:29:09.733: W/System.err(781): at com.lim.json.StaffListListener.onItemClick(StaffListListener.java:53)
奇怪的是,异常http://www.cs.auckland.ac.nz/our_staff/vcard.php?upi=kng001中的 URL 实际上是正确的 URL。我已经测试过了,它是有效的。为什么还是这个异常?