zoukankan      html  css  js  c++  java
  • android 网络_网络图片查看器

    xml

    <?xml version="1.0"?>
    
    -<LinearLayout tools:context=".MainActivity" android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
    
    <EditText android:id="@+id/et_url" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="http://www.baidu.com"/>
    
    <Button android:id="@+id/bt_looksource" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="查看图片"/>
    
    
    -<ScrollView android:layout_height="wrap_content" android:layout_width="wrap_content">
    
    <ImageView android:id="@+id/img_pic" android:layout_height="match_parent" android:layout_width="match_parent"/>
    
    </ScrollView>
    
    </LinearLayout>
    图片查看控件

    java

    package com.itheima.sourcelook;
    
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Looper;
    import android.os.Message;
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.text.TextUtils;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    import com.itheima.piclook.R;
    
    public class MainActivity extends Activity  implements OnClickListener{
    
        private EditText et_url;
        private ImageView img_pic;
        private Context mContext;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mContext =this;
            et_url = (EditText) findViewById(R.id.et_url);
            Button bt_looksource = (Button) findViewById(R.id.bt_looksource);
            img_pic = (ImageView) findViewById(R.id.img_pic);
            
            //二.设置点击事件
            bt_looksource.setOnClickListener(this);
        
            System.out.println("oncreate方法线程:"+Thread.currentThread().getName());
            
        }
    
        //☆☆☆1.在主线程中创建一个Handler对象
        private Handler handler = new Handler(){
            //☆☆☆2.重写handler的handlermessage方法,用来接收子线程中发来的消息
            public void handleMessage(android.os.Message msg) {
                //☆☆☆5.接收子线程发送的数据,处理数据。
                Bitmap bitmap  = (Bitmap) msg.obj;
                //☆☆☆6.当前方法属于主线程可以做UI的更新
                //五.获取服务器返回的内容,显示到textview上
                img_pic.setImageBitmap(bitmap);//设置ImageView的图片内容
            };
        };
        
        @Override
        public void onClick(View v) {
            
            
            try{
            //三.oclick方法中获取用户输入的url地址
            final String url_str = et_url.getText().toString().trim();
            if(TextUtils.isEmpty(url_str)){
                Toast.makeText(mContext, "url不能为空", 0).show();
                return ;
            }
            
            System.out.println("oclick方法线程:"+Thread.currentThread().getName());
            
            
            //创建一个子线程做网络请求
            new Thread(new Runnable() {
                
                @Override
                public void run() {
                    try{
                        System.out.println("oclick方法runnable线程:"+Thread.currentThread().getName());
                        
                        
                    //四.请求url地址
                    //1.创建一个Url对象
                        URL url = new URL(url_str);
                    //2.获取一个UrlConnection对象
                        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                    //3.为UrlConnection对象设置一些请求的参数,请求方式,连接的超时时间 
                        connection.setRequestMethod("GET");//设置请求方式
                        connection.setConnectTimeout(1000*10);//设置超时时间
                        
                        
                    //4.在获取url请求的数据前需要判断响应码,200 :成功,206:访问部分数据成功   300:跳转或重定向  400:错误 500:服务器异常
                        int code = connection.getResponseCode();
                        if(code == 200){
                    //5.获取有效数据,并将获取的流数据解析成String
                            InputStream inputStream = connection.getInputStream();
                            
                            //将一个读取流转换成一个图片 Drawable , Btimap:位图  ?????
                            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                            
                            
                            //☆☆☆3.子线中创建一个Message对象,为了携带子线程中获取的数据给主线程。
                            Message msg = Message.obtain();//获取一个Message对象,内部实现是:如果之前的Message存在直接返回,不存在创建新的Message返回
                            msg.obj = bitmap;//将获取的数据封装到msg中。
                            //☆☆☆4.使用handler对象将message发送到主线程。
                            handler.sendMessage(msg);
                
                            
                        }
                        
                    }catch (Exception e) {
                        e.printStackTrace();
                    }
                    
                }
            }).start();
            
            
                    
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
    }
    MainActivity

    字节流操作

    package com.itheima.sourcelook;
    
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    
    public class StreamUtils {
    
    
        public static String streamToString(InputStream  in){
            String result ="";
    
            try{
                //创建一个字节数组写入流
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                
                byte[] buffer = new byte[1024];
                int length = 0;
                while (  (length =  in.read(buffer)) !=-1) {
                    out.write(buffer, 0, length);
                    out.flush();
                }
                
                result = out.toString();//将字节流转换成string
                
                out.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
    
    
            return result;
        }
    }
    StreamUtils

    老师笔记

     04  网络图片查看器


            adb shell+  input text 内容;可以通过将内容输入到手机上的输入框。

            将一个读取流转换成bitmap对象:

            BitmapFactory:可以将文件,读取流,字节数组转换成一个Bitmap对象。
            Bitmap bitmap = BitmapFactory.decodeStream(InputStream in);
            
            imageView.setImageBitmap(bitmap);//设置图片内容

  • 相关阅读:
    S02_CH15_ AXI_OLED 实验
    S02_CH14_ EMIO_OLED 实验
    S02_CH13_ AXI_PWM 实验
    S02_CH12_ AXI_Lite 总线详解
    【第二季】CH11_ ZYNQ软硬调试高级技巧
    bzoj3028 食物
    Hdu3579 Hello Kiki
    bzoj4872 [Shoi2017]分手是祝愿
    bzoj4873 [Shoi2017]寿司餐厅
    省选模拟赛 LYK loves rabbits(rabbits)
  • 原文地址:https://www.cnblogs.com/liangqiyuan/p/5697188.html
Copyright © 2011-2022 走看看