背景
做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的时候就可以拿出来看看。