Android有用代碼片斷(四)

不知不覺中,就收集了超過60條的本身感受有意思的代碼片斷,分爲三篇文章: android有用代碼片斷Android有用代碼片斷(二)Android有用代碼片斷(三)這三篇,今天,開始第四篇的整理!

六11、Android建立桌面快捷方式:php

  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); }
須要聲明權限:

  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
html

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

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


六12、android畫圖去鋸齒效果json

paint.setAntiAlias(true);
canvas

畫圖片的時候,前面設置沒有用數組

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

六十3、獲取sd卡里文件信息ide

  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(); } } }

六十4、Android標題欄顯示progressBar佈局

  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);//在不須要顯示進度條的時候調用這個方法 }
六十5、單擊EditText全選內容

  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; }


六十6、Android設置圖片圓角

  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; }


六十7、把圖片轉換成圓形


  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; }

六十8、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. }


七10、Android 自定義json解析類

 
  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. }
相關文章
相關標籤/搜索