Android进阶之动态加载图片(runOnUiThread/handler)
2015-09-18 09:41
597 查看
1、权限
2、activity_image_view.xml
3、UserService.java
4、UserServiceImpl.java
5、ImageViewActivity.java
6、BaseActivity.java
7、效果图
<!-- 访问服务器权限 --> <uses-permission android:name="android.permission.INTERNET" />
2、activity_image_view.xml
<RelativeLayout 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: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="com.guan.http.activity.ImageViewActivity" > <ImageView android:id="@+id/iv_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/handler" android:contentDescription="@string/abc_action_bar_home_description"/> </RelativeLayout>
3、UserService.java
package com.guan.http.service; import java.io.InputStream; import java.util.List; import java.util.Map; import android.graphics.Bitmap; import com.guan.http.model.Student; public interface UserService { public Bitmap getImage() throws Exception; }
4、UserServiceImpl.java
package com.guan.http.service; public class UserServiceImpl implements UserService { /** * 获取图片业务 */ @Override public Bitmap getImage() throws Exception { Bitmap bitmap = null; InputStream in = null; URL url = null; HttpURLConnection urlConnection = null; OutputStream out = null; byte[] data = null; try { /** * Post方法 */ Map<String, String> params = new HashMap<String, String>(); params.put("id", "1"); // 封装参数 data = setPostPassParams(params).toString().getBytes(); url = new URL(Constant.uri + "GetImageServlet"); // 打开连接 urlConnection = (HttpURLConnection) url.openConnection(); // 设置连接超时时间 urlConnection.setConnectTimeout(3000); // 设置响应超时时间 urlConnection.setReadTimeout(3000); // 设置可以读取数据 urlConnection.setDoInput(true); // 设置可以写数据 urlConnection.setDoOutput(true); // 设置请求方法时POST请求 urlConnection.setRequestMethod("POST"); // 设置缓冲 urlConnection.setUseCaches(false); /** * HTTP协议 */ // urlConnection.setRequestProperty("Content-Type", newValue); // urlConnection.setRequestProperty("Content-Length", newValue); // 连接 urlConnection.connect(); // 输出流、客户端向服务器发送数据 out = urlConnection.getOutputStream(); // 向服务器写数据的关键代码 out.write(data); // 刷新 out.flush(); // 响应状态 int response = urlConnection.getResponseCode(); if (response != HttpURLConnection.HTTP_OK) { throw new ServiceRulesException("请求服务器出错"); } // 服务器传给客户端 in = new BufferedInputStream(urlConnection.getInputStream()); if (in != null) { // 转化类型 InputStream --> Bitmap 操作图片流的工厂方法 // 其他的转化: InputStream Bitmap Drawable byte[] bitmap = BitmapFactory.decodeStream(in); } /** * Get方法 */ // url = new URL(Constant.uri + "GetImageServlet?id=1"); // // 打开连接 // urlConnection = (HttpURLConnection) url.openConnection(); // // 设置可以读取 // urlConnection.setDoInput(true); // // 设置请求类型 // urlConnection.setRequestMethod("GET"); // // 连接 // urlConnection.connect(); // // 响应状态 // int response = urlConnection.getResponseCode(); // if (response != HttpStatus.SC_OK) { // throw new ServiceRulesException("请求服务器出错"); // } // // in = urlConnection.getInputStream(); // if(in != null) { // // 转化类型 InputStream --> Bitmap 操作图片流的工厂方法 // // 其他的转化: InputStream Bitmap Drawable byte[] // bitmap = BitmapFactory.decodeStream(in); // } } finally { if (in != null) { in.close(); } if (urlConnection != null) { urlConnection.disconnect(); } } return bitmap; } // 静态方法,重复使用 /** * @description 构造Post参数传递 * @param params * @return * @throws UnsupportedEncodingException */ private static StringBuffer setPostPassParams(Map<String, String> params) throws UnsupportedEncodingException { StringBuffer stringBuffer = new StringBuffer(); for (Map.Entry<String, String> entry : params.entrySet()) { stringBuffer.append(entry.getKey()).append("=") .append(URLEncoder.encode(entry.getValue(), "UTF-8")) .append("&"); } // 把最后&去掉 stringBuffer.deleteCharAt(stringBuffer.length() - 1); return stringBuffer; } }
5、ImageViewActivity.java
package com.guan.http.activity; import android.graphics.Bitmap; import android.os.Bundle; import android.widget.ImageView; import com.guan.http.R; import com.guan.http.exception.ServiceRulesException; import com.guan.http.service.UserService; import com.guan.http.service.UserServiceImpl; public class ImageViewActivity extends BaseActivity { private ImageView mImage; private UserService userService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_view); /** * 初始化变量 */ initVariable(); /** * 线程 */ thread(); } /** * 初始化变量 */ private void initVariable() { mImage = (ImageView) findViewById(R.id.iv_image); userService = new UserServiceImpl(); } /** * 线程 */ private void thread() { new Thread(new Runnable() { @Override public void run() { try { // 获取图片bitmap对象 final Bitmap bitmap = userService.getImage(); // runOnUiThread类似于Handler的方法 runOnUiThread(new Runnable() { @Override public void run() { if (bitmap != null) { mImage.setImageBitmap(bitmap); } else { // 代码指定控件加载图片两方法 mImage.setImageResource(R.drawable.ic_launcher); mImage.setImageDrawable(getResources() .getDrawable(R.drawable.ic_launcher)); } } }); } catch (final ServiceRulesException e) { e.printStackTrace(); runOnUiThread(new Runnable() { @Override public void run() { showMsg(e.getMessage()); } }); } catch (Exception e) { e.printStackTrace(); runOnUiThread(new Runnable() { @Override public void run() { showMsg("获取服务器出错"); } }); } } }).start(); } }
6、BaseActivity.java
package com.guan.http.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.provider.MediaStore.Images.Media; import android.view.Window; import android.widget.Toast; /** * @author Guan * @file com.example.guan.activity * @date 2015/8/14 * @Version 1.0 */ public class BaseActivity extends Activity { public final static int FIAL_LOAD_IMAGE = 1; public final static int FLAG_STUDENT_SUCCCESS = 1; public final static int FLAG_LOGIN_SUCCCESS = 1; public final static int FLAG_REGISTER_SUCCCESS = 1; public final static String MSG_LOGIN_ERROR = "登录出错"; public final static String MSG_LOGIN_SUCCESS = "登录成功"; public final static String MSG_LOGIN_FAILED = "登录名|登录密码错误"; public final static String MSG_SERVER_ERROR = "请求服务器错误"; public final static String MSG_REQUEST_TIMEOUT = "请求服务器超时"; public final static String MSG_REPONSE_TIMEOUT = "服务器响应超时"; public final static String MSG_STUDENT_ERROR = "加载数据出错"; public final static String MSG_REGISTER_ERROR = "注册出错"; public final static String MSG_REGISTER_SUCCESS = "注册成功"; public final static String MSG_REGISTER_FAILED = "注册名|注册密码错误"; /** * 把与业务相关的系统框架、界面初始化、设置等操作封装 * * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); } /** * Toast公共方法 * @param pMsg */ public void showMsg(String pMsg) { Toast.makeText(BaseActivity.this, pMsg, Toast.LENGTH_SHORT).show(); } /** * intent 跳转Activity公共方法 */ public void openActivity(Class<?> pClass) { Intent _intent = new Intent(this,pClass); startActivity(_intent); } /** * intent startActivityForResult 打开系统加载图片 */ public void startActivityForResult() { Intent intent = new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent,FIAL_LOAD_IMAGE); } /** * dialog 对话框公共方法 */ public void showAlterDialog() { } }
7、效果图
相关文章推荐
- 【设计模式】-建造者模式-Builder
- Android异步更新UI的方式之使用Handler的post(Runnabel r)方法
- AndroidRuntimeException: requestFeature() must be called before adding content
- php随笔-正则匹配&php浅复制&require跟include
- UI初级连载十一-------触摸与手势
- iOS项目开发实战——使用UICollectionView实现瀑布流
- 命令行和界面程序同时使用
- Android酷炫实用的开源框架(UI框架)
- IOS动画中的枚举UIViewAnimationOptions
- LeetCode Distinct Subsequences
- LeetCode Distinct Subsequences
- LintCode "Longest Increasing Subsequence"
- 如何用远丰DrpBuilder打造企业社会化分销体系
- 杭电1005-Number Sequence
- poj 2299Ultra-QuickSort
- equinox的框架的类加载器
- 苹果开发 笔记(75)UISegmentedControl
- UI树
- druid.io sql支持
- request的setCharacterEncoding()无效