0

正是标题所说的。我正在尝试在片段中显示来自 URl 的 imageView,但没有显示任何内容。Android 不会崩溃,布局只是空的。我在清单中启用了互联网权限。

<uses-permission android:name="android.permission.INTERNET" />

Java代码在这里

public class InboxFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {

View V = inflater.inflate(R.layout.inbox_frag_layout, container, false);
ImageView image = (ImageView)V.findViewById(R.id.imgView);
Drawable drw =LoadImageFromWebOperations("http://i.imgur.com/Svphn.jpg");
image.setImageDrawable(drw);

return V;

}

private Drawable LoadImageFromWebOperations(String strPhotoUrl) {
try {
  InputStream is = (InputStream) new URL(strPhotoUrl).getContent();
  Drawable d = Drawable.createFromStream(is, "src name");
  return d; 
}catch (Exception e) { 
  System.out.println("Exc="+e); 
  return null;
}

}
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width = "wrap_content" 
    android:layout_height="wrap_content" 
    >
 <ImageView
    android:id="@+id/imgView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"/>
</LinearLayout>

更新:改用 webview 修复它。

4

3 回答 3

1

我怀疑这个问题,但不知道解决方案,但仍想分享。每个网络调用都需要时间来执行。这个时间总是大于执行单行代码语句的 CPU 速度。因此,当您调用 LoadImageFromWebOperations() 函数时,不要期望它会实时从网络获取可绘制对象。一旦 LoadImageFromWebOperations() 函数执行并返回响应 onCreateView() 函数将已经完成其执行并返回视图而不在 imageView 上设置图像。

可能的解决方案是:返回视图而不在其上设置图像。并在下载后等待从网络下载的图像,然后获取片段的当前视图(我不知道如何)并在其上设置图像。

我期待有人给出如何获取片段的当前视图的解决方案。

于 2012-11-23T13:08:12.323 回答
0

为了让您的生活更轻松,请使用http://code.google.com/p/android-query/上的 AQuery 库。

使用该库将使您能够在一行中从 URL 设置图像视图:

aq.id(R.id.image1).image("http://www.vikispot.com/z/images/vikispot/android-w.png");

我建议这样做,因为它无需任何额外代码即可为您处理下载。它还以异步方式执行,这意味着您的 UI 线程不会被阻塞,这意味着用户不会减慢速度。

于 2012-04-22T18:33:10.227 回答
0

您可以使用以下代码从 url::: 获取位图

URL newurl = new URL(streamURL); 
HttpGet httpRequest = null;
try  {
    httpRequest = new HttpGet(newurl.toURI());
} catch (URISyntaxException e) {
    e.printStackTrace();
}
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();
Bitmap mIcon_val = BitmapFactory.decodeStream(instream);
于 2012-04-22T06:55:59.627 回答