源代码:
try {
URL url = new URL(path);
//得到与服务器的连接对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置请求方式为Http请求的GET
conn.setRequestMethod("GET");
//指定连接超时时间
conn.setConnectTimeout(5000);
//得到服务器端返回的状态码
int code = conn.getResponseCode();
if (code == 200) { //请求成功
InputStream is = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
iv_result.setImageBitmap(bitmap);
}else {
Toast.makeText(this, "服务器返回状态码错误", 0).show();
}
} catch (MalformedURLException e) {
e.printStackTrace();
Toast.makeText(this, "图片路径错误", 0).show();
} catch (IOException e) {
Toast.makeText(this, "访问网络错误", 0).show();
e.printStackTrace();
}
执行时出现错误:
java.lang.IllegalStateException: Could not execute method of the activity
解决方法:
从http://bbs.csdn.net/topics/390420266处找到解决方法,
在MainActivity中调用这个类的网络操作方法,可能会导致activity的一些问题,谷歌从在android2.3版本以后,系统增加了一个类:StrictMode。这个类对网络的访问方式进行了一定的改变。
StrictMode通常用于捕获磁盘访问或者网络访问中与主进程之间交互产生的问题,因为在主进程中,UI操作和一些动作的执行是最经常用到的,它们之间会产生一定的冲突问题。将磁盘访问和网络访问从主线程中剥离可以使磁盘或者网络的访问更加流畅,提升响应度和用户体验。
如果一定要这样操作的话,需要在MainActivity,onCreate中加入如下代码:
StrictMode.setThreadPolicy(new
StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(
new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
问题最终解决。