Android有用代码片段(四)

[+]
  1. 六十一Android创建桌面快捷方式
  2. 六十二android画图去锯齿效果
  3. 六十三获取sd卡里文件信息
  4. 六十四Android标题栏显示progressBar
  5. 六十五单击EditText全选内容
  6. 六十六Android设置图片圆角
  7. 六十七把图片转换成圆形
  8. 六十八TextView高级应用
  9. 六十九资源plurals表示数量的各种方式
  10. 七十Android 自定义json解析类

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

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

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

需要声明权限:

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

   六十四、Android标题栏显示progressBar

[java]  view plain copy
  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. }  

    六十五、单击EditText全选内容

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


六十六、Android设置图片圆角

[java]  view plain copy
  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(00, bitmap.getWidth(), bitmap.getHeight());   
  11.   final RectF rectF = new RectF(rect);   
  12.   final float roundPx = pixels;   
  13.   paint.setAntiAlias(true);   
  14.   canvas.drawARGB(0000);   
  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. }  


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


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


六十八、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.           
  8.         Resources r = getResources();  
  9.         String s1 = r.getQuantityString(R.plurals.student, 1,1);  
  10.         Log.i("plurals", s1);  
  11.         String s2 = r.getQuantityString(R.plurals.student, 2,2);  
  12.         Log.i("plurals", s2);  
  13.         String s3 = r.getQuantityString(R.plurals.student, 50,50);  
  14.         Log.i("plurals", s3);  
  15.           
  16.     }  
  17. }  


七十、Android 自定义json解析类

  
  
[java] view plain copy
  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. for (int 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. for (final 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. for (final Object o : array)  
  195. {  
  196. sb.append(toJson(o));  
  197. sb.append(',');  
  198. }  
  199.   
  200. // 将最后添加的 ',' 变为 ']':  
  201. sb.setCharAt(sb.length() - 1, ']');  
  202. return sb.toString();  
  203. }  
  204. static String intArray2Json(final int[] array)  
  205. {  
  206. if (array.length == 0)  
  207. {  
  208. return "[]";  
  209. }  
  210. final StringBuilder sb = new StringBuilder(array.length << 4);  
  211. sb.append('[');  
  212. for (final int o : array)  
  213. {  
  214. sb.append(Integer.toString(o));  
  215. sb.append(',');  
  216. }  
  217. // set last ',' to ']':  
  218. sb.setCharAt(sb.length() - 1, ']');  
  219. return sb.toString();  
  220. }  
  221. static String longArray2Json(final long[] array)  
  222. {  
  223. if (array.length == 0)  
  224. {  
  225. return "[]";  
  226. }  
  227. final StringBuilder sb = new StringBuilder(array.length << 4);  
  228. sb.append('[');  
  229. for (final long o : array)  
  230. {  
  231. sb.append(Long.toString(o));  
  232. sb.append(',');  
  233. }  
  234. // set last ',' to ']':  
  235. sb.setCharAt(sb.length() - 1, ']');  
  236. return sb.toString();  
  237. }  
  238. static String booleanArray2Json(final boolean[] array)  
  239. {  
  240. if (array.length == 0)  
  241. {  
  242. return "[]";  
  243. }  
  244. final StringBuilder sb = new StringBuilder(array.length << 4);  
  245. sb.append('[');  
  246. for (final boolean o : array)  
  247. {  
  248. sb.append(Boolean.toString(o));  
  249. sb.append(',');  
  250. }  
  251. // set last ',' to ']':  
  252. sb.setCharAt(sb.length() - 1, ']');  
  253. return sb.toString();  
  254. }  
  255. static String floatArray2Json(final float[] array)  
  256. {  
  257. if (array.length == 0)  
  258. {  
  259. return "[]";  
  260. }  
  261. final StringBuilder sb = new StringBuilder(array.length << 4);  
  262. sb.append('[');  
  263. for (final float o : array)  
  264. {  
  265. sb.append(Float.toString(o));  
  266. sb.append(',');  
  267. }  
  268. // set last ',' to ']':  
  269. sb.setCharAt(sb.length() - 1, ']');  
  270. return sb.toString();  
  271. }  
  272. static String doubleArray2Json(final double[] array)  
  273. {  
  274. if (array.length == 0)  
  275. {  
  276. return "[]";  
  277. }  
  278. final StringBuilder sb = new StringBuilder(array.length << 4);  
  279. sb.append('[');  
  280. for (final double o : array)  
  281. {  
  282. sb.append(Double.toString(o));  
  283. sb.append(',');  
  284. }  
  285. // set last ',' to ']':  
  286. sb.setCharAt(sb.length() - 1, ']');  
  287. return sb.toString();  
  288. }  
  289. static String shortArray2Json(final short[] array)  
  290. {  
  291. if (array.length == 0)  
  292. {  
  293. return "[]";  
  294. }  
  295. final StringBuilder sb = new StringBuilder(array.length << 4);  
  296. sb.append('[');  
  297. for (final short o : array)  
  298. {  
  299. sb.append(Short.toString(o));  
  300. sb.append(',');  
  301. }  
  302. // set last ',' to ']':  
  303. sb.setCharAt(sb.length() - 1, ']');  
  304. return sb.toString();  
  305. }  
  306. static String byteArray2Json(final byte[] array)  
  307. {  
  308. if (array.length == 0)  
  309. {  
  310. return "[]";  
  311. }  
  312. final StringBuilder sb = new StringBuilder(array.length << 4);  
  313. sb.append('[');  
  314. for (final byte o : array)  
  315. {  
  316. sb.append(Byte.toString(o));  
  317. sb.append(',');  
  318. }  
  319. // set last ',' to ']':  
  320. sb.setCharAt(sb.length() - 1, ']');  
  321. return sb.toString();  
  322. }  
  323. public static String object2Json(final Object bean)  
  324. {  
  325. //数据检查  
  326. if (bean == null)  
  327. {  
  328. return "{}";  
  329. }  
  330. final Method[] methods = bean.getClass().getMethods(); //方法数组  
  331. final StringBuilder sb = new StringBuilder(methods.length << 4); //4次方  
  332. sb.append('{');  
  333. for (final Method method : methods)  
  334. {  
  335. try  
  336. {  
  337. final String name = method.getName();  
  338. String key = "";  
  339. if (name.startsWith("get"))  
  340. {  
  341. key = name.substring(3);  
  342. //防死循环  
  343. final String[] arrs =  
  344. "Class" };  
  345. boolean bl = false;  
  346. for (final String s : arrs)  
  347. {  
  348. if (s.equals(key))  
  349. {  
  350. bl = true;  
  351. continue;  
  352. }  
  353. }  
  354. if (bl)  
  355. {  
  356. continue; //防死循环  
  357. }  
  358. }  
  359. else if (name.startsWith("is"))  
  360. {  
  361. key = name.substring(2);  
  362. }  
  363. if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && method.getParameterTypes().length == 0)  
  364. {  
  365. if (key.length() == 1)  
  366. {  
  367. key = key.toLowerCase();  
  368. }  
  369. else if (!Character.isUpperCase(key.charAt(1)))  
  370. {  
  371. key = key.substring(0, 1).toLowerCase() + key.substring(1);  
  372. }  
  373. final Object elementObj = method.invoke(bean);  
  374. //System.out.println("###" + key + ":" + elementObj.toString());  
  375. sb.append('\"');  
  376. sb.append(key); //不能包含特殊字符  
  377. sb.append('\"');  
  378. sb.append(':');  
  379. sb.append(toJson(elementObj)); //循环引用的对象会引发无限递归  
  380. sb.append(',');  
  381. }  
  382. }  
  383. catch (final Exception e)  
  384. {  
  385. //e.getMessage();  
  386. throw new RuntimeException("在将bean封装成JSON格式时异常:" + e.getMessage(), e);  
  387. }  
  388. }  
  389. if (sb.length() == 1)  
  390. {  
  391. return bean.toString();  
  392. }  
  393. else  
  394. {  
  395. sb.setCharAt(sb.length() - 1, '}');  
  396. return sb.toString();}  
  397. }  
  398. private JsonUtil(){  
  399. }  
  400. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值