网络图片查看器无法获取图片的解决方法

如果网络权限有了的话

应该是SDK版本的原因,4.0的话不允许在UI线程中访问网络,需新开线程访问网络,以防止主线程阻塞

解决方法:

一是在onCreate方法中加入两段代码,表示为调试模式, 此方法见(http://www.apkbus.com/android-74247-1-1.html)
二是在AndroidMainFest.xml中将 <user-sdk>删掉
三是新开线程,处理网络连接;Handler+Message方法

MainActivity.java

package com.ht.netimage;

import com.ht.imageService.ImageService;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private EditText path;
	private ImageView view;

	private final int CHNNG_UI = 1;
	private static final int ERROR = 0;
	// 主线程创建消息处理器
	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case CHNNG_UI:
				// 更新image
				Bitmap bitmap = (Bitmap) msg.obj;
				view.setImageBitmap(bitmap);
				break;

			case ERROR:
				Toast.makeText(MainActivity.this, R.string.fail,
						Toast.LENGTH_SHORT).show();
				break;
			}

		}

	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		path = (EditText) findViewById(R.id.path);
		view = (ImageView) findViewById(R.id.imageView);
		Button button = (Button) this.findViewById(R.id.button);
		button.setOnClickListener(new buttonClickLister());

	}

	private final class buttonClickLister implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			// 开启子线程来操作耗时操作(IO,网络等)
			new changImage().start();
		}

	}
	
	/**
	 * 这里处理网络
	 * @author 
	 *
	 */
	private final class changImage extends Thread{

		@Override
		public void run() {
			String p = path.getText().toString();
			Message msg = new Message();
			try {
				// 定义一个ImageService业务类,以字节数组的形式得到图片数据
				byte[] data = ImageService.getImage(p);
				// 使用数组数据生成位图的对象
				Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
						data.length);
				// 将位图放入图片控件
				// 更新UI要在主线程中

				msg.what = CHNNG_UI;
				msg.obj = bitmap;
				handler.sendMessage(msg);
				// view.setImageBitmap(bitmap);//显示图片
			} catch (Exception e) {
				msg.what = ERROR;
				handler.sendMessage(msg);
			}
		}
		
	}

}


你可能感兴趣的:(网络图片查看器无法获取图片的解决方法)