在布局文件中定义两个按钮,一个EditText和一个ImageView(用来显示图片)
public class MainActivity extends Activity {
EditText et_path;
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path = (EditText) findViewById(R.id.et_path);
iv = (ImageView) findViewById(R.id.iv);
}
/*
* handler其实就是消息处理机制。首先在主线程也就是UI创建一个Handler对象,复写其中的handMessage( Message
* msg)方法。该方法里的msg就是子线程发来的消息,表示子线程处理完了,以这个msg来通知主线程。让主线程来作UI的绘制工作。
*/
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
Toast.makeText(MainActivity.this, "图片的源地址不能为空,请输入", 0)
.show();
};
};
因为在主进程中不能有耗时操作(可能会使应用崩溃,毕竟处在等待状态,会使整个应用停滞),所以要用到子线程实现
public void getpic(View v) {
new Thread() {
public void run() {
String path = et_path.getText().toString().trim();
if (TextUtils.isEmpty(path)) {
handler.sendEmptyMessage(0x102); return;
}
try {
URL url = new URL(path);// 获取URL
// 建立连接
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);// 设置连接超时
conn.setRequestMethod("GET");// 设置请求方式(这里为获取资源)
int code = conn.getResponseCode();// 获取返回码
if (code == 200)// 为200则连接成功
{
InputStream is = conn.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(is);
iv.setImageBitmap(bmp);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
public void loadpic(View v) {
new Thread() {
public void run() {
String path = et_path.getText().toString().trim();
if (TextUtils.isEmpty(path)) {
handler.sendEmptyMessage(0x102); return;
}
try {
URL url = new URL(path);// 获取URL
// 建立连接
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);// 设置连接超时
conn.setRequestMethod("GET");// 设置请求方式(这里为获取资源)
int code = conn.getResponseCode();// 获取返回码
if (code == 200)// 为200则连接成功
{
InputStream is = conn.getInputStream();
FileOutputStream fos = MainActivity.this
.openFileOutput("pic.jpg",
MainActivity.this.MODE_PRIVATE);
int nRead = 0;
byte[] buffer = new byte[1024];
while ((nRead = is.read(buffer)) != -1) {
fos.write(buffer);
}
fos.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}