不知不觉中,就收集了超过60条的自己感觉有意思的代码片段,分为三篇文章: android有用代码片段、 Android有用代码片段(二)、 Android有用代码片段(三)这三篇,今天,开始第四篇的整理!

六十一、Android创建桌面快捷方式:

[java] view plain copy print ?
  1. /**
  2. * 为程序创建桌面快捷方式
  3. */
  4. private void addShortcut(){
  5. Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
  6. //快捷方式的名称
  7. shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
  8. shortcut.putExtra("duplicate", false); //不允许重复创建
  9. //指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer
  10. //注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序
  11. ComponentName comp = new ComponentName(this.getPackageName(), "."+this.getLocalClassName());
  12. shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));
  13. //快捷方式的图标
  14. ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);
  15. shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
  16. sendBroadcast(shortcut);
  17. }
/** * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); //快捷方式的名称 shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); shortcut.putExtra("duplicate", false); //不允许重复创建 //指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer //注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序 ComponentName comp = new ComponentName(this.getPackageName(), "."+this.getLocalClassName()); shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp)); //快捷方式的图标 ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes); sendBroadcast(shortcut); }
需要声明权限:

[java] view plain copy print ?
  1. <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

http://www.cnblogs.com/-OYK/archive/2011/05/31/2064797.html

http://www.apkbus.com/android-17389-1-1.html

http://dev.10086.cn/cmdn/wiki/index.php?edition-view-8836-1.html


六十二、android画图去锯齿效果

paint.setAntiAlias(true);

画图片的时候,前面设置没有用

canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));

六十三、获取sd卡里文件信息

[java] view plain copy print ?
  1. public class SDFileExplorer extends Activity{
  2. ListView listView;
  3. TextView textView;
  4. // 记录当前的父文件夹
  5. File currentParent;
  6. // 记录当前路径下的所有文件的文件数组
  7. File[] currentFiles;
  8. @Override
  9. public void onCreate(Bundle savedInstanceState){
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. //获取列出全部文件的ListView
  13. listView = (ListView) findViewById(R.id.list);
  14. textView = (TextView) findViewById(R.id.path);
  15. //获取系统的SD卡的目录
  16. File root = new File("/mnt/sdcard/");
  17. //如果 SD卡存在
  18. if (root.exists()){
  19. currentParent = root;
  20. currentFiles = root.listFiles();
  21. //使用当前目录下的全部文件、文件夹来填充ListView
  22. inflateListView(currentFiles);
  23. }
  24. // 为ListView的列表项的单击事件绑定监听器
  25. listView.setOnItemClickListener(new OnItemClickListener(){
  26. @Override
  27. public void onItemClick(AdapterView<?> parent, View view,
  28. int position, long id){
  29. // 用户单击了文件,直接返回,不做任何处理
  30. if (currentFiles[position].isFile())
  31. return;
  32. // 获取用户点击的文件夹下的所有文件
  33. File[] tmp = currentFiles[position].listFiles();
  34. if (tmp == null || tmp.length == 0){
  35. Toast.makeText(SDFileExplorer.this, "当前路径不可访问或该路径下没有文件",
  36. 20000).show();
  37. }else{
  38. //获取用户单击的列表项对应的文件夹,设为当前的父文件夹
  39. currentParent = currentFiles[position];
  40. //保存当前的父文件夹内的全部文件和文件夹
  41. currentFiles = tmp;
  42. // 再次更新ListView
  43. inflateListView(currentFiles);
  44. }
  45. }
  46. });
  47. // 获取上一级目录的按钮
  48. Button parent = (Button) findViewById(R.id.parent);
  49. parent.setOnClickListener(new OnClickListener(){
  50. @Override
  51. public void onClick(View source){
  52. try{
  53. if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")){
  54. // 获取上一级目录
  55. currentParent = currentParent.getParentFile();
  56. // 列出当前目录下所有文件
  57. currentFiles = currentParent.listFiles();
  58. // 再次更新ListView
  59. inflateListView(currentFiles);
  60. }
  61. }
  62. catch (IOException e){
  63. e.printStackTrace();
  64. }
  65. }
  66. });
  67. }
  68. private void inflateListView(File[] files){
  69. // 创建一个List集合,List集合的元素是Map
  70. List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
  71. for (int i = 0; i < files.length; i++){
  72. Map<String, Object> listItem = new HashMap<String, Object>();
  73. //如果当前File是文件夹,使用folder图标;否则使用file图标
  74. if (files[i].isDirectory()){
  75. listItem.put("icon", R.drawable.folder);
  76. }else{
  77. listItem.put("icon", R.drawable.file);
  78. }
  79. listItem.put("fileName", files[i].getName());
  80. //添加List项
  81. listItems.add(listItem);
  82. }
  83. // 创建一个SimpleAdapter
  84. SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
  85. R.layout.line, new String[] { "icon", "fileName" }, new int[] {
  86. R.id.icon, R.id.file_name });
  87. // 为ListView设置Adapter
  88. listView.setAdapter(simpleAdapter);
  89. try{
  90. textView.setText("当前路径为:" + currentParent.getCanonicalPath());
  91. }catch (IOException e){
  92. e.printStackTrace();
  93. }
  94. }
  95. }
public class SDFileExplorer extends Activity{ ListView listView; TextView textView; // 记录当前的父文件夹 File currentParent; // 记录当前路径下的所有文件的文件数组 File[] currentFiles; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取列出全部文件的ListView listView = (ListView) findViewById(R.id.list); textView = (TextView) findViewById(R.id.path); //获取系统的SD卡的目录 File root = new File("/mnt/sdcard/"); //如果 SD卡存在 if (root.exists()){ currentParent = root; currentFiles = root.listFiles(); //使用当前目录下的全部文件、文件夹来填充ListView inflateListView(currentFiles); } // 为ListView的列表项的单击事件绑定监听器 listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id){ // 用户单击了文件,直接返回,不做任何处理 if (currentFiles[position].isFile()) return; // 获取用户点击的文件夹下的所有文件 File[] tmp = currentFiles[position].listFiles(); if (tmp == null || tmp.length == 0){ Toast.makeText(SDFileExplorer.this, "当前路径不可访问或该路径下没有文件", 20000).show(); }else{ //获取用户单击的列表项对应的文件夹,设为当前的父文件夹 currentParent = currentFiles[position]; //保存当前的父文件夹内的全部文件和文件夹 currentFiles = tmp; // 再次更新ListView inflateListView(currentFiles); } } }); // 获取上一级目录的按钮 Button parent = (Button) findViewById(R.id.parent); parent.setOnClickListener(new OnClickListener(){ @Override public void onClick(View source){ try{ if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")){ // 获取上一级目录 currentParent = currentParent.getParentFile(); // 列出当前目录下所有文件 currentFiles = currentParent.listFiles(); // 再次更新ListView inflateListView(currentFiles); } } catch (IOException e){ e.printStackTrace(); } } }); } private void inflateListView(File[] files){ // 创建一个List集合,List集合的元素是Map List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < files.length; i++){ Map<String, Object> listItem = new HashMap<String, Object>(); //如果当前File是文件夹,使用folder图标;否则使用file图标 if (files[i].isDirectory()){ listItem.put("icon", R.drawable.folder); }else{ listItem.put("icon", R.drawable.file); } listItem.put("fileName", files[i].getName()); //添加List项 listItems.add(listItem); } // 创建一个SimpleAdapter SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.line, new String[] { "icon", "fileName" }, new int[] { R.id.icon, R.id.file_name }); // 为ListView设置Adapter listView.setAdapter(simpleAdapter); try{ textView.setText("当前路径为:" + currentParent.getCanonicalPath()); }catch (IOException e){ e.printStackTrace(); } } }

六十四、Android标题栏显示progressBar

[java] view plain copy print ?
  1. protected void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能
  4. setContentView(R.layout.main);
  5. setProgressBarIndeterminateVisibility(true);//在需要显示进度条的时候调用这个方法
  6. setProgressBarIndeterminateVisibility(false);//在不需要显示进度条的时候调用这个方法
  7. }
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能 setContentView(R.layout.main); setProgressBarIndeterminateVisibility(true);//在需要显示进度条的时候调用这个方法 setProgressBarIndeterminateVisibility(false);//在不需要显示进度条的时候调用这个方法 }
六十五、单击EditText全选内容

[java] view plain copy print ?
  1. percent.setOnTouchListener(this);
  2. @Override
  3. public boolean onTouch(View v, MotionEvent event) {
  4. if(v.getId()==R.id.seekPercent) {
  5. percent.selectAll();
  6. InputMethodManager imm = (InputMethodManager)
  7. context.getSystemService(Context.INPUT_METHOD_SERVICE);
  8. imm.showSoftInput(v, 0);
  9. return true;
  10. }
  11. return false;
  12. }
percent.setOnTouchListener(this); @Override public boolean onTouch(View v, MotionEvent event) { if(v.getId()==R.id.seekPercent) { percent.selectAll(); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(v, 0); return true; } return false; }


六十六、Android设置图片圆角

[java] view plain copy print ?
  1. /**
  2. * 将图片设置为圆角
  3. */
  4. public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
  5. Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
  6. bitmap.getHeight(), Config.ARGB_8888);
  7. Canvas canvas = new Canvas(output);
  8. final int color = 0xff424242;
  9. final Paint paint = new Paint();
  10. final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
  11. final RectF rectF = new RectF(rect);
  12. final float roundPx = pixels;
  13. paint.setAntiAlias(true);
  14. canvas.drawARGB(0, 0, 0, 0);
  15. paint.setColor(color);
  16. canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
  17. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  18. canvas.drawBitmap(bitmap, rect, rect, paint);
  19. return output;
  20. }
/** * 将图片设置为圆角 */ public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; }


六十七、把图片转换成圆形


[html] view plain copy print ?
  1. bitmap = ((BitmapDrawable)imageView1.getDrawable()).getBitmap();
  2. bitmap = getRoundedCornerBitmap(bitmap);
  3. imageView1.setImageBitmap(bitmap);
  4. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
  5. Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
  6. bitmap.getHeight(), Config.ARGB_8888);
  7. Canvas canvas = new Canvas(output);
  8. final int color = 0xff424242;
  9. final Paint paint = new Paint();
  10. final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
  11. final RectF rectF = new RectF(rect);
  12. final float roundPx = bitmap.getWidth() / 2;
  13. paint.setAntiAlias(true);
  14. canvas.drawARGB(0, 0, 0, 0);
  15. paint.setColor(color);
  16. canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
  17. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  18. canvas.drawBitmap(bitmap, rect, rect, paint);
  19. return output;
  20. }
bitmap = ((BitmapDrawable)imageView1.getDrawable()).getBitmap(); bitmap = getRoundedCornerBitmap(bitmap); imageView1.setImageBitmap(bitmap); public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = bitmap.getWidth() / 2; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; }

六十八、TextView高级应用


1. 自定义字体

可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的 Typeface又使用TTF字体文件来设置字体

所以,我们可以在程序中放入TTF字体文件,在程序中使用Typeface来设置字体:第一步,在assets目录下新建fonts目录,把TTF字体文件放到这里。第二步,程序中调用:

TextViewtv = (TextView)findViewById(R.id.textView);

AssetManagermgr=getAssets();//得到AssetManager

Typefacetf=Typeface.createFromAsset(mgr, "fonts/mini.TTF");//根据路径得到Typeface

tv.setTypeface(tf);//设置字体

效果如下图所示:




2. 显示多种颜色的字

Android支持html格式的字符串,通过调用Html.fromHtml(str)方法可以转换html格式的字符串str。

示例如下:

StringtextStr1 = "<font color=\"#ffff00\">如果有一天,</font><br>";

StringtextStr2 = "<font color=\"#00ff00\">我厌倦了这里,</font><br>";

StringtextStr3 = "<font color=\"#ff00ff\">我会乘着梦,</font><br>";

StringtextStr4 = "<font color=\"#00ffff\">飞向那个属于自己的<br>世界……</font><br>";

tv.setText(Html.fromHtml(textStr1+textStr2+textStr3+textStr4));

运行后效果如下:




3. 字体加粗

在xml布局文件中使用android:textStyle=”bold”可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:使用TextPaint的仿“粗体”设置setFakeBoldText为true。示例代码如下:

tv.getPaint().setFakeBoldText(true);

效果如下:




4. 添加阴影

在xml布局文件中使用一系列android:shadowXXX属性可添加设置阴影。具体为:shadowColor设置阴影颜色;shadowDx设置阴影水平偏移量;shadowDy设置阴影垂直偏移量;shadowRadius设置阴影半径。

示例代码:

android:shadowColor="#ffffff"

android:shadowDx="15.0"

android:shadowDy="5.0"

android:shadowRadius="2.5"

显示效果如下:




5. 插入图片

插入图片有两种方法,第一种方法就是用上面说的html格式的字符串,不过转换稍微有些麻烦。需要用到ImageGetter类来对图片的src属性进行转换。示例代码如下:

StringimgStr = "<img src=\""+R.drawable.sidai+"\"/>";

Html.ImageGetterimageGetter = new Html.ImageGetter() {

public Drawable getDrawable(Stringarg0) {

// TODO Auto-generated methodstub

int id =Integer.parseInt(arg0);

Drawable draw =getResources().getDrawable(id);

draw.setBounds(10, 10, 228,300);

return draw;

}

};

tv.append(Html.fromHtml(imgStr,imageGetter,null));

第二种方法是使用xml布局文件中一系列android:drawableXXX属性来实现插入图片。具体为:drawableBottom是在文本框内文本的底端绘制指定图像;drawableLeft是在文本框内文本的左边绘制指定图像;drawableRight是在文本框内文本的右边绘制指定图像;drawableTop是在文本框内文本的顶端绘制指定图像;drawablePadding设置文本框内文本与图像之间的间距。示例代码:

android:drawableBottom=”@drawable/sidai”

插入图片后的显示效果如下:





六十九、资源plurals表示数量的各种方式,比如:一个教室有多少学生。考虑下面的例子:
there is 1 student;
there are 2 students;
there are 50 students;
显然对于2,50句子格式是一样的,对于1不同,Android支持将这种变体表示为plurals资源。

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="hello">Hello World, Resource_Plurals!</string>
  4. <string name="app_name">Resource_Plurals</string>
  5. <plurals name="student">
  6. <item quantity="one">There is 1 student</item>
  7. <item quantity="other">There are %d students</item>
  8. </plurals>
  9. </resources>
在Java代码中获取定义的plurals资源
[java] view plain copy
  1. public class Resource_Plurals extends Activity {
  2. /** Called when the activity is first created. */
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main);
  7. Resources r = getResources();
  8. String s1 = r.getQuantityString(R.plurals.student, 1,1);
  9. Log.i("plurals", s1);
  10. String s2 = r.getQuantityString(R.plurals.student, 2,2);
  11. Log.i("plurals", s2);
  12. String s3 = r.getQuantityString(R.plurals.student, 50,50);
  13. Log.i("plurals", s3);
  14. }
  15. }


七十、Android 自定义json解析类

                                     [java] view plain copy print ?                         
  1. import java.lang.reflect.Method;
  2. import java.util.Collection;
  3. import java.util.Map;
  4. import java.util.Set;
  5. public final class JsonUtil{
  6. /**
  7. * 把对象封装为JSON格式
  8. *
  9. * @param o
  10. * 对象
  11. * @return JSON格式
  12. */
  13. @SuppressWarnings"unchecked"
  14. public static String toJson(final Object o){
  15. if (o == null){
  16. return "null"
  17. }
  18. if (o instanceof String) //String{
  19. return string2Json((String) o);
  20. }
  21. if (o instanceof Boolean) //Boolean{
  22. return boolean2Json((Boolean) o);
  23. }
  24. if (o instanceof Number) //Number{
  25. return number2Json((Number) o);
  26. }
  27. if (o instanceof Map) //Map{
  28. return map2Json((Map<String, Object>) o);
  29. }
  30. if (o instanceof Collection) //List Set{
  31. return collection2Json((Collection) o);
  32. }
  33. if (o instanceof Object[]) //对象数组{
  34. return array2Json((Object[]) o);
  35. }
  36. if (o instanceof int[])//基本类型数组
  37. {
  38. return intArray2Json((int[]) o);
  39. }
  40. if (o instanceof boolean[])//基本类型数组
  41. {
  42. return booleanArray2Json((boolean[]) o);
  43. }
  44. if (o instanceof long[])//基本类型数组
  45. {
  46. return longArray2Json((long[]) o);
  47. }
  48. if (o instanceof float[])//基本类型数组
  49. {
  50. return floatArray2Json((float[]) o);
  51. }
  52. if (o instanceof double[])//基本类型数组
  53. {
  54. return doubleArray2Json((double[]) o);
  55. }
  56. if (o instanceof short[])//基本类型数组
  57. {
  58. return shortArray2Json((short[]) o);
  59. }
  60. if (o instanceof byte[])//基本类型数组
  61. {
  62. return byteArray2Json((byte[]) o);
  63. }
  64. if (o instanceof Object) //保底收尾对象
  65. {
  66. return object2Json(o);
  67. }
  68. throw new RuntimeException("不支持的类型: " + o.getClass().getName());
  69. }
  70. /**
  71. * 将 String 对象编码为 JSON格式,只需处理好特殊字符
  72. *
  73. * @param s
  74. * String 对象
  75. * @return JSON格式
  76. */
  77. static String string2Json(final String s)
  78. {
  79. final StringBuilder sb = new StringBuilder(s.length() + 20);
  80. sb.append('\"');
  81. forint i = 0; i < s.length(); i++)
  82. {
  83. final char c = s.charAt(i);
  84. switch (c)
  85. {
  86. case '\"'
  87. sb.append("\\\"");
  88. break
  89. case '\\'
  90. sb.append("\\\\");
  91. break
  92. case '/'
  93. sb.append("\\/");
  94. break
  95. case '\b'
  96. sb.append("\\b");
  97. break
  98. case '\f'
  99. sb.append("\\f");
  100. break
  101. case '\n'
  102. sb.append("\\n");
  103. break
  104. case '\r'
  105. sb.append("\\r");
  106. break
  107. case '\t'
  108. sb.append("\\t");
  109. break
  110. default
  111. sb.append(c);
  112. }
  113. }
  114. sb.append('\"');
  115. return sb.toString();
  116. }
  117. /**
  118. * 将 Number 表示为 JSON格式
  119. *
  120. * @param number
  121. * Number
  122. * @return JSON格式
  123. */
  124. static String number2Json(final Number number)
  125. {
  126. return number.toString();
  127. }
  128. /**
  129. * 将 Boolean 表示为 JSON格式
  130. *
  131. * @param bool
  132. * Boolean
  133. * @return JSON格式
  134. */
  135. static String boolean2Json(final Boolean bool)
  136. {
  137. return bool.toString();
  138. }
  139. /**
  140. * 将 Collection 编码为 JSON 格式 (List,Set)
  141. *
  142. * @param c
  143. * @return
  144. */
  145. static String collection2Json(final Collection<Object> c)
  146. {
  147. final Object[] arrObj = c.toArray();
  148. return toJson(arrObj);
  149. }
  150. /**
  151. * 将 Map<String, Object> 编码为 JSON 格式
  152. *
  153. * @param map
  154. * @return
  155. */
  156. static String map2Json(final Map<String, Object> map)
  157. {
  158. if (map.isEmpty())
  159. {
  160. return "{}"
  161. }
  162. final StringBuilder sb = new StringBuilder(map.size() << 4); //4次方
  163. sb.append('{');
  164. final Set<String> keys = map.keySet();
  165. forfinal String key : keys)
  166. {
  167. final Object value = map.get(key);
  168. sb.append('\"');
  169. sb.append(key); //不能包含特殊字符
  170. sb.append('\"');
  171. sb.append(':');
  172. sb.append(toJson(value)); //循环引用的对象会引发无限递归
  173. sb.append(',');
  174. }
  175. // 将最后的 ',' 变为 '}':
  176. sb.setCharAt(sb.length() - 1'}');
  177. return sb.toString();
  178. }
  179. /**
  180. * 将数组编码为 JSON 格式
  181. *
  182. * @param array
  183. * 数组
  184. * @return JSON 格式
  185. */
  186. static String array2Json(final Object[] array)
  187. {
  188. if (array.length == 0
  189. {
  190. return "[]"
  191. }
  192. final StringBuilder sb = new StringBuilder(array.length << 4); //4次方
  193. sb.append('[');
  194. forfinal Object o : array)
  195. {
  196. sb.append(toJson(o));
  197. sb.append(',');
  198. }
  199. // 将最后添加的 ',' 变为 ']':
  200. sb.setCharAt(sb.length() - 1']');
  201. return sb.toString();
  202. }
  203. static String intArray2Json(final int[] array)
  204. {
  205. if (array.length == 0
  206. {
  207. return "[]"
  208. }
  209. final StringBuilder sb = new StringBuilder(array.length << 4);
  210. sb.append('[');
  211. forfinal int o : array)
  212. {
  213. sb.append(Integer.toString(o));
  214. sb.append(',');
  215. }
  216. // set last ',' to ']':
  217. sb.setCharAt(sb.length() - 1']');
  218. return sb.toString();
  219. }
  220. static String longArray2Json(final long[] array)
  221. {
  222. if (array.length == 0
  223. {
  224. return "[]"
  225. }
  226. final StringBuilder sb = new StringBuilder(array.length << 4);
  227. sb.append('[');
  228. forfinal long o : array)
  229. {
  230. sb.append(Long.toString(o));
  231. sb.append(',');
  232. }
  233. // set last ',' to ']':
  234. sb.setCharAt(sb.length() - 1']');
  235. return sb.toString();
  236. }
  237. static String booleanArray2Json(final boolean[] array)
  238. {
  239. if (array.length == 0
  240. {
  241. return "[]"
  242. }
  243. final StringBuilder sb = new StringBuilder(array.length << 4);
  244. sb.append('[');
  245. forfinal boolean o : array)
  246. {
  247. sb.append(Boolean.toString(o));
  248. sb.append(',');
  249. }
  250. // set last ',' to ']':
  251. sb.setCharAt(sb.length() - 1']');
  252. return sb.toString();
  253. }
  254. static String floatArray2Json(final float[] array)
  255. {
  256. if (array.length == 0
  257. {
  258. return "[]"
  259. }
  260. final StringBuilder sb = new StringBuilder(array.length << 4);
  261. sb.append('[');
  262. forfinal float o : array)
  263. {
  264. sb.append(Float.toString(o));
  265. sb.append(',');
  266. }
  267. // set last ',' to ']':
  268. sb.setCharAt(sb.length() - 1']');
  269. return sb.toString();
  270. }
  271. static String doubleArray2Json(final double[] array)
  272. {
  273. if (array.length == 0
  274. {
  275. return "[]"
  276. }
  277. final StringBuilder sb = new StringBuilder(array.length << 4);
  278. sb.append('[');
  279. forfinal double o : array)
  280. {
  281. sb.append(Double.toString(o));
  282. sb.append(',');
  283. }
  284. // set last ',' to ']':
  285. sb.setCharAt(sb.length() - 1']');
  286. return sb.toString();
  287. }
  288. static String shortArray2Json(final short[] array)
  289. {
  290. if (array.length == 0
  291. {
  292. return "[]"
  293. }
  294. final StringBuilder sb = new StringBuilder(array.length << 4);
  295. sb.append('[');
  296. forfinal short o : array)
  297. {
  298. sb.append(Short.toString(o));
  299. sb.append(',');
  300. }
  301. // set last ',' to ']':
  302. sb.setCharAt(sb.length() - 1']');
  303. return sb.toString();
  304. }
  305. static String byteArray2Json(final byte[] array)
  306. {
  307. if (array.length == 0
  308. {
  309. return "[]"
  310. }
  311. final StringBuilder sb = new StringBuilder(array.length << 4);
  312. sb.append('[');
  313. forfinal byte o : array)
  314. {
  315. sb.append(Byte.toString(o));
  316. sb.append(',');
  317. }
  318. // set last ',' to ']':
  319. sb.setCharAt(sb.length() - 1']');
  320. return sb.toString();
  321. }
  322. public static String object2Json(final Object bean)
  323. {
  324. //数据检查
  325. if (bean == null
  326. {
  327. return "{}"
  328. }
  329. final Method[] methods = bean.getClass().getMethods(); //方法数组
  330. final StringBuilder sb = new StringBuilder(methods.length << 4); //4次方
  331. sb.append('{');
  332. forfinal Method method : methods)
  333. {
  334. try
  335. {
  336. final String name = method.getName();
  337. String key = ""
  338. if (name.startsWith("get"))
  339. {
  340. key = name.substring(3);
  341. //防死循环
  342. final String[] arrs =
  343. { "Class" };
  344. boolean bl = false
  345. forfinal String s : arrs)
  346. {
  347. if (s.equals(key))
  348. {
  349. bl = true
  350. continue
  351. }
  352. }
  353. if (bl)
  354. {
  355. continue//防死循环
  356. }
  357. }
  358. else if (name.startsWith("is"))
  359. {
  360. key = name.substring(2);
  361. }
  362. if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && method.getParameterTypes().length == 0
  363. {
  364. if (key.length() == 1
  365. {
  366. key = key.toLowerCase();
  367. }
  368. else if (!Character.isUpperCase(key.charAt(1)))
  369. {
  370. key = key.substring(01).toLowerCase() + key.substring(1);
  371. }
  372. final Object elementObj = method.invoke(bean);
  373. //System.out.println("###" + key + ":" + elementObj.toString());
  374. sb.append('\"');
  375. sb.append(key); //不能包含特殊字符
  376. sb.append('\"');
  377. sb.append(':');
  378. sb.append(toJson(elementObj)); //循环引用的对象会引发无限递归
  379. sb.append(',');
  380. }
  381. }
  382. catchfinal Exception e)
  383. {
  384. //e.getMessage();
  385. throw new RuntimeException("在将bean封装成JSON格式时异常:" + e.getMessage(), e);
  386. }
  387. }
  388. if (sb.length() == 1
  389. {
  390. return bean.toString();
  391. }
  392. else
  393. {
  394. sb.setCharAt(sb.length() - 1'}');
  395. return sb.toString();}
  396. }
  397. private JsonUtil(){
  398. }
  399. }

更多相关文章

  1. [置顶] Android(安卓)Makefile分析
  2. Android学习路线_入门篇(一)编写简单的APP
  3. android Setting中隐藏项
  4. Android(安卓)Makefile分析
  5. Android(安卓)NDK环境配置与开发
  6. Android学习之路(一)之 Android文件简单介绍
  7. 让Android(安卓)变身回一台真正的Linux系统吧!!!
  8. Android的init过程详解(一)
  9. android makefile(转载)

随机推荐

  1. android 使用ffmpeg加水印
  2. ubuntu gradle编译总结
  3. android各种对话框总结笔记
  4. android中去掉标题栏和状态栏,实现全屏
  5. Android网络技术
  6. android gdb使用
  7. android中文api:Manifest.permission grou
  8. Android菜鸟的成长笔记(20)——IntentServi
  9. 国内访问android开发者网站
  10. Android 珍藏(二)