Threadf访问网络从网络中浏览图片

一、项目开发

       1、项目运行效果图


       2、项目开发概要

             本项目利用多线程从网络上获取图片进而浏览的功能,是在Android2.3.3版本的环境下编译的,控件比较简单,功能单一,线程中是先在主线程中创建消息处理器,然后再创建链接网络的线程,之后再对接收到的线程消息进行处理,切记在主线程中直接创建线程,创建子线程。注意让用户获取联网权限: <!-- 允许用户联网权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>

二、开发Thread浏览图片应用讲解

     1、项目文件

              

    2、修改布局文件activity.xml代码如下:

           

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/ivImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" />

    <EditText
        android:id="@+id/etImageUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:text="http://pic.nipic.com/2007-11-08/2007118192311804_2.jpg"
        android:hint="请输入图片的地址" />

    <Button
        android:id="@+id/btnView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:onClick="viewImage"
        android:text="浏览" />

</LinearLayout>

       3、修改文件MianActivity.java代码如下:

  

package cn.edu.bzu.example.showimage;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
	protected static final int SHOW_IMAGE = 0;
	private ImageView ivNetImage;
	private EditText etImageUrl;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etImageUrl=(EditText) findViewById(R.id.etImageUrl);
        ivNetImage=(ImageView) findViewById(R.id.ivImage);
    }
    //1.在主线程中创建消息处理器
    private Handler handler=new Handler(){
    	public void handleMessage(android.os.Message msg) {
    		//3.对接收到的新的消息进行处理
    		switch (msg.what){
    		case SHOW_IMAGE:
    			Bitmap bitmap=(Bitmap) msg.obj;
    			ivNetImage.setImageBitmap(bitmap);
    			break;
    			default:
    				break;
    		}
    	};
    };
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    public void viewImage(View view) {
    	final String path=etImageUrl.getText().toString();//获取地址path
    	if(TextUtils.isEmpty(path)){
    		Toast.makeText(this, "图片路径不能为空", Toast.LENGTH_SHORT).show();
    	}else{
    		new Thread(){
    			public void run(){
    				//连接服务器
    	    		try {
    					URL url=new URL(path);
    					//发出http请求
    					HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
    					httpURLConnection.setRequestMethod("GET");
    					//设置连接时间
    					httpURLConnection.setConnectTimeout(5000);
    					int responsecode=httpURLConnection.getResponseCode();
    					if(responsecode==200){
    						InputStream is=httpURLConnection.getInputStream();
    						Bitmap bitmap=BitmapFactory.decodeStream(is);
    						//2.告诉主线程,请帮我更新界面,内容是bitmap
    						Message msg=new Message();
    						msg.what=SHOW_IMAGE;
    						msg.obj=bitmap;
    						handler.sendMessage(msg);
//    						ivNetImage.setImageBitmap(bitmap);
    					}else{
    						Toast.makeText(MainActivity.this, "显示图片失败", Toast.LENGTH_SHORT).show();
    					}
    				} catch (MalformedURLException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			};
    		}.start();
    	}
	}
}


    注意:在文件AndroidManifest.xml文件中加入获取联网权限,代码如下:

 

 <!-- 允许用户联网权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>


 到这里本项目就结束了,还请多多指点,多谢!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饕餮幻想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值