无法显示URL图像(位图) [英] unable to display url image (bitmap)

查看:176
本文介绍了无法显示URL图像(位图)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想显示我的形象,但它并不显示:

 公共位图getUserPic(字符串picID){
    串IMAGEURL;
    位图位图= NULL;
    Log.d(位图,加载图片);
    IMAGEURL = picID;
    Log.d(图像URL,picID);
    尝试{
        位= BitmapFactory.de codeStream((InputStream的)新的URL(IMAGEURL).getContent());
    }赶上(例外五){
        Log.d(位图,加载图片失败);
        e.printStackTrace();
    }
    返回位图;
}

logcat的输出:(?我如何显示我的logcat输出更整洁)

  17 10-19:01:50.835:D /图片URL(8636): http://sphotos-c.ak.fbcdn.net/hphotos-ak-prn1/c0.0.403.403/p403x403/554229_4774210003216_2100715293_n.jpg
10-19 17:01:50.840:D /位图(8636):加载图片失败10-19
17:01:50.840:W / System.err的(8636):10-19 android.os.NetworkOnMainThreadException 17:01:50.840:W / System.err的(8636):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode的.java:1099)
10-19 17:01:50.840:W / System.err的(8636):在java.net.InetAddress.lookupHostByName(InetAddress.java:391)10-19
17:01:50.840:W / System.err的(8636):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)10-19
17:01:50.840:W / System.err的(8636):在java.net.InetAddress.getAllByName(InetAddress.java:220)10-19
17:01:50.840:W / System.err的(8636):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:71)10-19。
17:01:50.840:W / System.err的(8636):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:50)10-19。
17:01:50.840:W / System.err的(8636):在libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:351)
10-19 17:01:50.840:W / System.err的(8636):在
libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
10-19 17:01:50.840:W / System.err的(8636):在
libcore.net.http.HttpConnection.connect(HttpConnection.java:128)10-19
17:01:50.840:W / System.err的(8636):在
libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
10-19 17:01:50.840:W / System.err的(8636):在
libcore.net.http.HttpEngine.connect(HttpEngine.java:303)10-19
17:01:50.840:W / System.err的(8636):在
libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
10-19 17:01:50.840:W / System.err的(8636):在
libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)10-19
17:01:50.840:W / System.err的(8636):在
libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
10-19 17:01:50.840:W / System.err的(8636):在
java.net.URLConnection.getContent(URLConnection.java:194)10-19
17:01:50.840:W / System.err的(8636):在
java.net.URL.getContent(URL.java:447)10-19
17:01:50.840:W / System.err的(8636):在jp.gr.java_conf.akabeko.testimagegallery.MainActivity.getUserPic(MainActivity.java:275)
10-19 17:01:50.845:W / System.err的(8636):在jp.gr.java_conf.akabeko.testimagegallery.MainActivity$fetchArticles.onPostExecute(MainActivity.java:251)
10-19 17:01:50.845:W / System.err的(8636):在jp.gr.java_conf.akabeko.testimagegallery.MainActivity$fetchArticles.onPostExecute(MainActivity.java:1)
10-19 17:01:50.845:W / System.err的(8636):在android.os.AsyncTask.finish(AsyncTask.java:602)10-19 17:01:50.845:
W / System.err的(8636):在android.os.AsyncTask.access $ 600(AsyncTask.java:156)10-19
17:01:50.845:W / System.err的(8636):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:615)
10-19 17:01:50.845:W / System.err的(8636):在android.os.Handler.dispatchMessage(Handler.java:99)10-19
17:01:50.845:W / System.err的(8636):在android.os.Looper.loop(Looper.java:137)10-19
17:01:50.845:W / System.err的(8636):在android.app.ActivityThread.main(ActivityThread.java:4517)10-19
17:01:50.845:W / System.err的(8636):在java.lang.reflect.Method.invokeNative(本机方法)10-19
17:01:50.845:W / System.err的(8636):在java.lang.reflect.Method.invoke(Method.java:511)10-19
17:01:50.845:W / System.err的(8636):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:995)
10-19 17:01:50.845:W / System.err的(8636):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)10-19
17:01:50.845:W / System.err的(8636):在dalvik.system.NativeStart.main(本机方法)10-19 17:01:50.915:D /剪贴板(8636):隐藏剪贴板在对话框输入起始:由其他人完成了...!


解决方案

当应用程序试图在其主要thread.This进行联网操作只能抛出应用针对蜂窝SDK或更高的异常。针对应用较早的SDK版本被允许做自己的主事件循环线程联网,但它严重阻碍。


  

使用一个AsyncTask的工作再上一个单独的线程的图像,然后分配
  它显示在onPostExecute瞧!它应该工作。


转寄此为异步任务:的http:// Android的开发者。 blogspot.in/2009/05/painless-threading.html

有一个肮脏的修复,但我会建议从未使用这种

  StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()permitAll()建立()。StrictMode.setThreadPolicy(政策);

I am trying to display my image but it doesn't show:

public Bitmap getUserPic(String picID) {
    String imageURL;
    Bitmap bitmap = null;
    Log.d("BITMAP", "Loading Picture");
    imageURL = picID;
    Log.d("image url", picID);
    try {
        bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageURL).getContent());
    } catch (Exception e) {
        Log.d("BITMAP", "Loading Picture FAILED");
        e.printStackTrace();
    }
    return bitmap;
}

Logcat output: (how do i display my logcat output neater?)

10-19 17:01:50.835: D/image url(8636): http://sphotos-c.ak.fbcdn.net/hphotos-ak-prn1/c0.0.403.403/p403x403/554229_4774210003216_2100715293_n.jpg
10-19 17:01:50.840: D/BITMAP(8636): Loading Picture FAILED 10-19
17:01:50.840: W/System.err(8636): android.os.NetworkOnMainThreadException 10-19 17:01:50.840: W/System.err(8636): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
10-19 17:01:50.840: W/System.err(8636): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 10-19
17:01:50.840: W/System.err(8636): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 10-19
17:01:50.840: W/System.err(8636): at java.net.InetAddress.getAllByName(InetAddress.java:220) 10-19
17:01:50.840: W/System.err(8636): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 10-19
17:01:50.840: W/System.err(8636): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 10-19
17:01:50.840: W/System.err(8636): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
10-19 17:01:50.840: W/System.err(8636):     at
libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
10-19 17:01:50.840: W/System.err(8636):     at
libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 10-19
17:01:50.840: W/System.err(8636):   at
libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
10-19 17:01:50.840: W/System.err(8636):     at
libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 10-19
17:01:50.840: W/System.err(8636):   at
libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
10-19 17:01:50.840: W/System.err(8636):     at
libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 10-19
17:01:50.840: W/System.err(8636):   at
libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
10-19 17:01:50.840: W/System.err(8636):     at
java.net.URLConnection.getContent(URLConnection.java:194) 10-19
17:01:50.840: W/System.err(8636):   at
java.net.URL.getContent(URL.java:447) 10-19 
17:01:50.840: W/System.err(8636): at jp.gr.java_conf.akabeko.testimagegallery.MainActivity.getUserPic(MainActivity.java:275)
10-19 17:01:50.845: W/System.err(8636): at jp.gr.java_conf.akabeko.testimagegallery.MainActivity$fetchArticles.onPostExecute(MainActivity.java:251)
10-19 17:01:50.845: W/System.err(8636): at jp.gr.java_conf.akabeko.testimagegallery.MainActivity$fetchArticles.onPostExecute(MainActivity.java:1)
10-19 17:01:50.845: W/System.err(8636): at android.os.AsyncTask.finish(AsyncTask.java:602) 10-19 17:01:50.845:
W/System.err(8636): at android.os.AsyncTask.access$600(AsyncTask.java:156) 10-19
17:01:50.845: W/System.err(8636): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
10-19 17:01:50.845: W/System.err(8636): at android.os.Handler.dispatchMessage(Handler.java:99) 10-19
17:01:50.845: W/System.err(8636): at android.os.Looper.loop(Looper.java:137) 10-19 
17:01:50.845: W/System.err(8636): at android.app.ActivityThread.main(ActivityThread.java:4517) 10-19
17:01:50.845: W/System.err(8636): at java.lang.reflect.Method.invokeNative(Native Method) 10-19
17:01:50.845: W/System.err(8636): at java.lang.reflect.Method.invoke(Method.java:511) 10-19 
17:01:50.845: W/System.err(8636): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:995)
10-19 17:01:50.845: W/System.err(8636): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 10-19
17:01:50.845: W/System.err(8636): at dalvik.system.NativeStart.main(Native Method) 10-19 17:01:50.915: D/CLIPBOARD(8636): Hide Clipboard dialog at Starting input: finished by someone else... !

解决方案

The exception is thrown when an application attempts to perform a networking operation on its main thread.This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged.

Use an AsyncTask to get the image on a seperate thread and then assign it to display on onPostExecute and Voila! it should work.

Refer this for Async task: http://android-developers.blogspot.in/2009/05/painless-threading.html

There is a dirty fix but I would recommend never to use this

 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy); 

这篇关于无法显示URL图像(位图)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆