通过HTTP访问网络资源

添加访问网络的权限:<uses-permission android:name="android.permission.INTERNET"/>

package com.shz.imageviewer;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import android.os.Build; public class MainActivity extends Activity { private ImageView iv;
private EditText txtPath; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); this.iv = (ImageView) this.findViewById(R.id.iv);
this.txtPath = (EditText) this.findViewById(R.id.txtPath);
} // Android新版系统中不允许UI处理比较耗时的操作(ANR),如果有耗时操作,可以通过开启一个子线程去处理;
// 只有UI线程可以更新view对象。 // 如果有多个子线程更新UI,更新UI完毕后,检查这个更新的操作是否在主线程的代码中执行的,
// 如果是主线程,则不会有问题
// 如果不是主线程,则会抛出异常:CalledFromWrongThreadException // 1.定义一个handler消息处理器
private Handler handler = new Handler(){ @Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Bitmap bitmap = (Bitmap)msg.obj;
iv.setImageBitmap(bitmap);
break;
case 2:
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}; private void sendMessage(int what,Object obj)
{
Message msg = new Message();
msg.what = what;
msg.obj = obj;
handler.sendMessage(msg);
} public void click(View view) {
final String path = this.txtPath.getText().toString().trim();
if (TextUtils.isEmpty(path)) {
return;
} // 2.开启一个子线程获取网络图片资源数据
new Thread(){
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(10000);
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"); int code = conn.getResponseCode();
if ( code == 200) {
Bitmap bitmap = BitmapFactory.decodeStream(conn.getInputStream()); // 3.利用handler消息处理器发送一条消息到主线程的MessageQueue消息队列中,主线程中
// 有一个消息轮询器Looper,此Looper会去不断的轮询MQ中的消息并
// 交给handler的handleMessage()方法去处理
sendMessage(1, bitmap);
} else {
sendMessage(2, "获取图片失败");
}
} catch (Exception e) {
e.printStackTrace();
sendMessage(2, "获取图片失败");
}
};
}.start();
}
}

通过HTTP访问网络资源

上一篇:JS 使用 splice() 对数组去重


下一篇:Cordova 问题点备忘