Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Android中将url转换为位图_Android_Bitmap - Fatal编程技术网

无法在Android中将url转换为位图

无法在Android中将url转换为位图,android,bitmap,Android,Bitmap,我正在开发一个Android应用程序。在我的应用程序中,我需要将url转换为位图。我在网上搜索,在堆栈溢出中找到了一些代码。我刚用过。但它不起作用。这给了我错误 这是我的转换方法 public final class CommonHelper{ public static Bitmap ConvertUrlToBitmap(String src) { try { URL url = new URL(src); Htt

我正在开发一个Android应用程序。在我的应用程序中,我需要将url转换为位图。我在网上搜索,在堆栈溢出中找到了一些代码。我刚用过。但它不起作用。这给了我错误

这是我的转换方法

public final class CommonHelper{
    public static Bitmap ConvertUrlToBitmap(String src)
    {
        try {
            URL url = new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}
所以,当我在活动中使用该方法时,它给了我错误。这是logcat中的错误

这就是错误所在

05-05 17:41:16.674 10095-10101/? E/jdwp: Failed sending reply to debugger: Broken pipe
05-05 17:41:16.674 10095-10101/? D/dalvikvm: Debugger has detached; object registry had 1 entries
05-05 17:41:16.770 10095-10095/? W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
05-05 17:41:16.770 10095-10095/? I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
05-05 17:41:16.770 10095-10095/? W/dalvikvm: VFY: unable to resolve interface method 18254: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
05-05 17:41:16.770 10095-10095/? D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
05-05 17:41:16.770 10095-10095/? I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode
05-05 17:41:16.770 10095-10095/? W/dalvikvm: VFY: unable to resolve interface method 18258: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
05-05 17:41:16.770 10095-10095/? D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
05-05 17:41:16.782 10095-10098/? D/dalvikvm: GC_CONCURRENT freed 169K, 12% free 2684K/3020K, paused 2ms+0ms, total 5ms
05-05 17:41:16.786 10095-10095/? I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead.
05-05 17:41:16.786 10095-10095/? I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
05-05 17:41:16.786 10095-10095/? W/dalvikvm: VFY: unable to resolve virtual method 522: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
05-05 17:41:16.786 10095-10095/? D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
05-05 17:41:16.790 10095-10095/? I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
05-05 17:41:16.790 10095-10095/? W/dalvikvm: VFY: unable to resolve virtual method 544: Landroid/content/res/TypedArray;.getType (I)I
05-05 17:41:16.790 10095-10095/? D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
05-05 17:41:16.798 10095-10095/? D/dalvikvm: GC_FOR_ALLOC freed 37K, 10% free 2814K/3120K, paused 3ms, total 3ms
05-05 17:41:16.798 10095-10095/? I/dalvikvm-heap: Grow heap (frag case) to 3.981MB for 1127532-byte allocation
05-05 17:41:16.802 10095-10104/? D/dalvikvm: GC_FOR_ALLOC freed <1K, 8% free 3914K/4224K, paused 3ms, total 3ms
05-05 17:41:16.806 10095-10098/? D/dalvikvm: GC_CONCURRENT freed <1K, 8% free 3914K/4224K, paused 0ms+0ms, total 2ms
05-05 17:41:16.834 10095-10098/? D/dalvikvm: GC_CONCURRENT freed 159K, 8% free 4153K/4480K, paused 2ms+0ms, total 5ms
05-05 17:41:16.846 10095-10095/? I/CURRENT_LANGUAGE: 1
05-05 17:41:16.850 10095-10095/? D/AndroidRuntime: Shutting down VM
05-05 17:41:16.850 10095-10095/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4b60648)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime: FATAL EXCEPTION: main
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.blog.waiyanhein.mmfashion.mmfashion/com.blog.waiyanhein.mmfashion.mmfashion.MainActivity}: android.os.NetworkOnMainThreadException
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5103)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:525)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:  Caused by: android.os.NetworkOnMainThreadException
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.io.IoBridge.connect(IoBridge.java:112)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at java.net.Socket.connect(Socket.java:842)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.blog.waiyanhein.mmfashion.model.CommonHelper.ConvertUrlToBitmap(CommonHelper.java:595)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.blog.waiyanhein.mmfashion.mmfashion.MainActivity.addCategoriesToMenu(MainActivity.java:345)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.blog.waiyanhein.mmfashion.mmfashion.MainActivity.bindCategoryMenu(MainActivity.java:376)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.blog.waiyanhein.mmfashion.mmfashion.MainActivity.onCreate(MainActivity.java:101)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5133)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5103) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:525) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
05-05 17:41:16.850 10095-10095/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method) 

您正在尝试联机连接并执行网络任务。所有网络任务必须在单独的线程中完成

尝试一下:

private Bitmap bitmap;

private class ConvertUrlToBitmap extends AsyncTask<String, Long, Boolean> {
    @Override
    protected Boolean doInBackground(String... params) {
        try {
            URL url = new URL(params[0]);
            bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            return true;
        } catch (Exception e) {
            Log.e(TAG, e.toString());
            return false;
        }
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        if(aBoolean) {
            // download was successful
            // if you want to update your UI, make sure u do it on main thread. like this:
            MyActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // update UI here
                }
            });
        } else {
            // download failed
        }
    }
}

希望这有帮助

您正在尝试联机连接并执行网络任务。所有网络任务必须在单独的线程中完成

尝试一下:

private Bitmap bitmap;

private class ConvertUrlToBitmap extends AsyncTask<String, Long, Boolean> {
    @Override
    protected Boolean doInBackground(String... params) {
        try {
            URL url = new URL(params[0]);
            bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            return true;
        } catch (Exception e) {
            Log.e(TAG, e.toString());
            return false;
        }
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        if(aBoolean) {
            // download was successful
            // if you want to update your UI, make sure u do it on main thread. like this:
            MyActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // update UI here
                }
            });
        } else {
            // download failed
        }
    }
}

希望这有帮助

您正试图在主线程中运行网络消费任务(这可能会阻止UI刷新,这就是Android抱怨的原因)

您应该启动一个可用于下载图像并以专用回调方法返回的


对于这种情况,我个人使用的是library。使用此工具,您可以将问题简化为所述的几个步骤。

您正试图在主线程中运行网络消费任务(这可能会阻止UI刷新-这就是Android抱怨的原因)

您应该启动一个可用于下载图像并以专用回调方法返回的


对于这种情况,我个人使用的是library。使用此工具,您可以将问题简化为所述的几个步骤。

在设置内容视图(R.layout.activity_your)之后将以下代码写入活动文件中

下面是导入语句到java文件中

import android.os.StrictMode;

setContentView(R.layout.activity_your)
之后,将以下代码写入活动文件中

下面是导入语句到java文件中

import android.os.StrictMode;

尝试将代码放入
线程中

我认为,您可以使用
WebView
来显示Url图像:

webView.loadUrl(urlImage)

尝试将代码放入
线程中

我认为,您可以使用
WebView
来显示Url图像:

webView.loadUrl(urlImage)

为此目的使用AsyncTask。你可以试试这个

  class GetImage extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    public Bitmap doInBackground(String... urls) {
        Bitmap map = null;
        try {
            URL url = new URL(urls[0]);
            HttpURLConnection connection =(HttpURLConnection)url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            map= BitmapFactory.decodeStream(input);


        } catch (Exception e) {

            e.printStackTrace();

        }

        return map;
    }

    protected void onPostExecute(Bitmap bMap) {


        try {
            if (!isCancelled()) {
                if (bMap != null) {
                   //set your image view here.

                }
            }
        }catch (Exception exception){
        exception.printStackTrace();
        }
    }

}
类GetImage扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
公共位图doInBackground(字符串…URL){
位图映射=空;
试一试{
URL=新URL(URL[0]);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream输入=连接。getInputStream();
map=BitmapFactory.decodeStream(输入);
}捕获(例外e){
e、 printStackTrace();
}
返回图;
}
受保护的void onPostExecute(位图bMap){
试一试{
如果(!isCancelled()){
如果(bMap!=null){
//在此处设置图像视图。
}
}
}捕获(异常){
异常。printStackTrace();
}
}
}

为此目的使用AsyncTask。你可以试试这个

  class GetImage extends AsyncTask<String, Void, Bitmap> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    public Bitmap doInBackground(String... urls) {
        Bitmap map = null;
        try {
            URL url = new URL(urls[0]);
            HttpURLConnection connection =(HttpURLConnection)url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            map= BitmapFactory.decodeStream(input);


        } catch (Exception e) {

            e.printStackTrace();

        }

        return map;
    }

    protected void onPostExecute(Bitmap bMap) {


        try {
            if (!isCancelled()) {
                if (bMap != null) {
                   //set your image view here.

                }
            }
        }catch (Exception exception){
        exception.printStackTrace();
        }
    }

}
类GetImage扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
公共位图doInBackground(字符串…URL){
位图映射=空;
试一试{
URL=新URL(URL[0]);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream输入=连接。getInputStream();
map=BitmapFactory.decodeStream(输入);
}捕获(例外e){
e、 printStackTrace();
}
返回图;
}
受保护的void onPostExecute(位图bMap){
试一试{
如果(!isCancelled()){
如果(bMap!=null){
//在此处设置图像视图。
}
}
}捕获(异常){
异常。printStackTrace();
}
}
}

实际上,我只需要可绘制的。我想为菜单项设置图标,如menu.add(“Title”).setIcon(可绘制)。所以我认为毕加索不能解决这个问题。那么我该如何实现它呢?@WaiYan-我想你应该改进你的问题,提供更多细节,因为问题表明你只在将图像下载为位图方面存在问题。谢谢,但我找到了解决方案。@WaiYan-很高兴听到你自己找到了解决方案!:)不要犹豫,把它贴出来作为你自己问题的答案,这样其他和你情况类似的开发者可能会发现你的提示很有用。实际上,我只需要可以画的。我想为菜单项设置图标,如menu.add(“Title”).setIcon(可绘制)。所以我认为毕加索不能解决这个问题。那么我该如何实现它呢?@WaiYan-我想你应该改进你的问题,提供更多细节,因为问题表明你只在将图像下载为位图方面存在问题。谢谢,但我找到了解决方案。@WaiYan-很高兴听到你自己找到了解决方案!:)请毫不犹豫地将其作为您自己问题的答案发布,以便其他与您情况类似的开发人员可能会发现您的提示很有用;img.execute(“您的图像url”);调用GetImage作为GetImage img=newgetimage();img.execute(“您的图像url”);