zoukankan      html  css  js  c++  java
  • android.os.NetworkOnMainThreadException

    NetworkOnMainThreadException: The exception that is thrown when an application attempts to perform a networking operation on its main thread.
    
    You should call sendfeedback method on asynctask then only above code will work. As webserver is taking lot of time to response main thread 
    becomes unresponsive. To avoid it you should call it on another thread. Hence asynctask is better.


    当在主线程中执行网络操作时,NetworkOnMainThreadException会抛出这个异常;

    你应该调用“asynctask”的“sendfeedback”方法来执行网络操作;当Web服务器花费很多时间响应主线程而变成迟钝,为了避免这种情况,使用“asynctask”更好

    package com.example.lj.imagedemo;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ImageView;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class MainActivity extends AppCompatActivity {
    
        private static final String TAG = "MainActivity";
        private ImageView imageView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            try {
                imageView = (ImageView) findViewById(R.id.imageView);
    /*
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //图片资源
                        String url = "http://s16.sinaimg.cn/orignal/89429f6dhb99b4903ebcf&690";
                        //得到可用的图片
                        Bitmap bitmap = getHttpBitmap(url);
                        if (bitmap == null) {
                            Log.i(TAG, "bitmap is null");
                        }
                        //显示
                        imageView.setImageBitmap(bitmap);
                    }
                }).start();
    */
                new DownloadUrlBitmap().execute("http://192.168.118.120:8888/img/dn1.jpg");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private class DownloadUrlBitmap extends AsyncTask<String, Void, Bitmap> {
            @Override
            protected Bitmap doInBackground(String... params) {
                return loadImageFromNetwork(params[0]);
            }
    
            @Override
            protected void onPostExecute(Bitmap bitmap) {
                imageView.setImageBitmap(bitmap);
            }
        }
    
    
        private Bitmap loadImageFromNetwork(String url) {
            //得到可用的图片
            Bitmap bitmap = simpleNetworkImage(url);
            if (bitmap == null) {
                Log.i(TAG, "bitmap is null");
            }
            return bitmap;
        }
    
    
        public Bitmap simpleNetworkImage(String url) {
            Bitmap pngBM = null;
            try {
                URL picUrl = new URL(url);
                pngBM = BitmapFactory.decodeStream(picUrl.openStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            return pngBM;
        }
    
        /**
         * 获取网落图片资源
         *
         * @param url
         * @return
         */
        public Bitmap getHttpBitmap(String url) {
            URL myFileURL;
            Bitmap bitmap = null;
            try {
                myFileURL = new URL(url);
                //获得连接
                HttpURLConnection conn = (HttpURLConnection) myFileURL.openConnection();
                //设置超时时间为6000毫秒,conn.setConnectionTiem(0);表示没有时间限制
                conn.setConnectTimeout(6000);
                //连接设置获得数据流
                conn.setDoInput(true);
                //不使用缓存
                conn.setUseCaches(false);
                //这句可有可无,没有影响
                //conn.connect();
                //得到数据流
                InputStream is = conn.getInputStream();
                //解析得到图片
                bitmap = BitmapFactory.decodeStream(is);
                //关闭数据流
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bitmap;
        }
    }
  • 相关阅读:
    大话设计模式C++实现-第1章-简单工厂模式
    mac下的git的安装与简单的配置
    Execute failed: java.io.IOException: Cannot run program &quot;sdk-linux/build-tools/22.0.0/aapt&quot;: error=2
    UIScrollView 循环滚动,代码超简单
    字符编码的前世今生
    Android 4.4 KitKat 支持 u 盘功能
    Java Tread多线程(1)实现Runnable接口
    (hdu step 6.3.3)Air Raid(最小路径覆盖:求用最少边把全部的顶点都覆盖)
    每日算法之二十三:Reverse Nodes in k-Group
    Android4.0-4.4 加入实体按键振动支持的方法(java + smali版本号)
  • 原文地址:https://www.cnblogs.com/liaojie970/p/5788733.html
Copyright © 2011-2022 走看看