来自Fragment中的URL的Android Imageview未显示

时间:2012-04-22 06:35:36

标签: android imageview fragment

正如标题所说的那样。我尝试在片段中显示来自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修复它。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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);

答案 2 :(得分: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线程不会被阻止,这意味着用户不会放慢速度。