背景
做app开发的,和后台连调是一个很重要的工作。在我来到这家公司之前,一只以为所有的功能是后台先开发出来然后app才开始开发。但是由于现在app开发和后台开发是两套人马,所以不可避免的需要同时开发甚至同时上线。我们不得不面临的一个问题是后台只给出了接口,客户端并没有可以连调的环境,这样就不得不自己写虚拟数据模拟。让客户端能够按某个流程能够点下去。
做一个有趣的人
做app开发的,和后台连调是一个很重要的工作。在我来到这家公司之前,一只以为所有的功能是后台先开发出来然后app才开始开发。但是由于现在app开发和后台开发是两套人马,所以不可避免的需要同时开发甚至同时上线。我们不得不面临的一个问题是后台只给出了接口,客户端并没有可以连调的环境,这样就不得不自己写虚拟数据模拟。让客户端能够按某个流程能够点下去。
首先需求是这样的 ,我把它简化一下:
User user1=new User();
user1.setUserName("wxn");
User user2=new User();
user2.setUserName("kkkk");
User user3=user2;
接下来的操作我想让user2中的值和user1中的值全部相等。我们知道可以通过 user2=user1.clone()方法去获得一个新的对象,这种方法的详细介绍在这里可以学习。http://www.cnblogs.com/yxnchinahlj/archive/2010/09/20/1831615.html
但是这样clone出来的是一个新的对象,user2就是user1的一个新对象的拷贝,虽然user2中的值可以和user1中的值相等,但是 user3就已经不是user2之前的对象了,我需要user3中的值也跟着改变。
于是最简单的方法就是在User类中增加一个方法
public void copy(User user){ this.setUserName(user.getUserName); this.setUserId(user.setUserId); ..... }
如果user中的属性太多怎么办?那写起来太麻烦了,除了方法名get和set有区别之外没什么区别, 于是我想起了之前看过的java反射机制来批量处理,顺便巩固一下java的反射机制,实现代码如下
public void copy(User user) { //获得User类中所有的方法 Method[] methods = user.getClass().getMethods(); try { for (int i = 0; i < methods.length; i++) { String mName = methods[i].getName(); if (mName.startsWith("set")) { String nName =null; //若为boolean的属性则没有get方法 只有 isXXX方法 if(boolean.class.equals(methods[i].getParameterTypes()[0]) ){ nName=mName.replace("set", "is"); } else{ nName=mName.replace("set", "get"); } Method method = user.getClass().getDeclaredMethod(nName, null); methods[i].invoke(this, method.invoke(user, null)); } } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
全部代码如下
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * * @author ahsiu * */ public class User { private int userId; private String userName; private String password; private String email; private String phone; private int loginState; private boolean flag; public int getUserId() { return userId; } public void copy(User user) { Method[] methods = user.getClass().getMethods(); try { for (int i = 0; i < methods.length; i++) { String mName = methods[i].getName(); if (mName.startsWith("set")) { String nName =null; //若为boolean的属性则没有get方法 只有 isXXX方法 if(boolean.class.equals(methods[i].getParameterTypes()[0]) ){ nName=mName.replace("set", "is"); } else{ nName=mName.replace("set", "get"); } Method method = user.getClass().getDeclaredMethod(nName, null); methods[i].invoke(this, method.invoke(user, null)); } } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void setUserId(int userId) { this.userId = userId; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public int getLoginState() { return loginState; } public void setLoginState(int loginState) { this.loginState = loginState; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } public static void main(String[] args) { User user1=new User(); user1.setUserName("wxn"); User user2=new User(); user2.setUserName("kkkk"); User user3=user2; System.out.println(user1.getUserName()); System.out.println(user2.getUserName()); System.out.println(user3.getUserName()); System.out.println(""); user2.copy(user1); System.out.println(user1.getUserName()); System.out.println(user2.getUserName()); System.out.println(user3.getUserName()); System.out.println(""); user3.setUserName("ahsiu"); System.out.println(user1.getUserName()); System.out.println(user2.getUserName()); System.out.println(user3.getUserName()); } }
大家好,今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但是当图片很大的时候
就要用BitmapFactory.Options这个东东了,Options里主要有两个参数比较重要.
options.inJustDecodeBounds = false/true; //图片压缩比例. options.inSampleSize = ssize;
我们去解析一个图片,如果太大,就会OOM,我们可以设置压缩比例inSampleSize,但是这个压缩比例设置多少就是个问题,所以我们解析图片可以分为俩个步骤,第一步就是获取图片的宽高,这里要设置Options.inJustDecodeBounds=true,这时候decode的bitmap为null,只是把图片的宽高放在Options里,然后第二步就是设置合适的压缩比例inSampleSize,这时候获得合适的Bitmap.这里我画了简单的流程图,如下:
Continue reading “[转]android解决图片加载oom的方法”1. 程序启动图标:
ldpi (120 dpi)
小屏
mdpi (160 dpi)
中屏
hdpi (240 dpi)
大屏
xhdpi (320 dpi)
特大屏
36 x 36 px
48 x 48 px
72 x 72 px
96 x 96 px
ICON圆角半径
iTunes Artwork icon ───────────────────────── 512px (90px)
App icon(iPhone4) ────────────────────────── 114px (20px)
App icon(iPad) ───────────────────────────── 72px (12px)
App icon(iPhone 3G/3GS) ───────────────────── 57px(10px)
Spotlight/Settings icon icon(iPhone4) ───────────── 58px (10px)
Spotlight/Settings icon icon(iPhone 3G/3GS/iPad) ──── 29px (9px)
在Android开发中,我们经常需要在界面上弹出一些对话框,比如询问用户或者让用户选择。 下面总结了下dialog的一些样式。
1.该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式。
创建dialog对话框方法代码如下:
在onKeyDown(int keyCode, KeyEvent event)方法中调用此方法
2.改变了对话框的图表,添加了三个按钮
创建dialog的方法代码如下:
3.信息内容是一个简单的View类型
创建dialog方法的代码如下:
4.信息内容是一组单选框
创建dialog方法的代码如下:
5.信息内容是一组多选框
创建dialog方法的代码如下:
6.信息内容是一组简单列表项
创建dialog的方法代码如下:
7.信息内容是一个自定义的布局
dialog布局文件代码如下:
创建dialog方法的代码如下:
好了,以上7种Android dialog对话框的使用方法就介绍到这里了,基本都全了,如果大家在android开发过程中遇到dialog的时候就可以拿出来看看。