正如标题所说的那样。我尝试在片段中显示来自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修复它。
答案 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线程不会被阻止,这意味着用户不会放慢速度。