Some words about me

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas a urna sit amet leo sagittis cursus a at lectus. Donec bibendum facilisis ultricies. Maecenas nec arcu dui, ut lobortis erat. In nec condimentum quam. Vivamus euismod scelerisque ligula vitae fermentum. Nulla dignissim rutrum eleifend.

Donec mi eros, congue ut consectetur eget, pretium vitae orci. Aliquam pharetra ultricies lobortis. Morbi eget nisi lectus. Maecenas felis augue, molestie in vestibulum et, lacinia et leo. Suspendisse potenti. Maecenas eget est augue. Donec tincidunt mollis fermentum.

Contact me?

 
 
 

Donec mi eros, congue ut consectetur eget, pretium vitae orci. Aliquam pharetra ultricies lobortis. Morbi eget nisi lectus. Maecenas felis augue, molestie in vestibulum et, lacinia et leo. Suspendisse potenti. Maecenas eget est augue. Donec tincidunt mollis fermentum.

Send the message
 

获取第三方的授权

   折腾了很久,终于找到了湖区第三方授权,然后通过授权,我们就可以发布一些自己想要的东西了。这里的代码,我也不是很懂,但是这个是一个独立的东西,大家如果实在不是很懂亦可以拿起去用。毕竟在我觉得,有很多代码,既然有现成的,就不必非要去弄得很透彻,只要懂大概思路以及逻辑就行了。

这里我会将代码贴出来:

  1  
  2 
  3 package cn.android.share;
  4 
  5  
  6 
  7 import java.io.File;
  8 
  9 import java.io.FileOutputStream;
 10 
 11  
 12 
 13 import cn.android.app.R;
 14 
 15 import cn.sharesdk.framework.AbstractWeibo;
 16 
 17 import cn.sharesdk.onekeyshare.ShareAllGird;
 18 
 19 import android.app.Activity;
 20 
 21 import android.content.Intent;
 22 
 23 import android.graphics.Bitmap;
 24 
 25 import android.graphics.Bitmap.CompressFormat;
 26 
 27 import android.graphics.BitmapFactory;
 28 
 29 import android.os.Bundle;
 30 
 31 import android.os.Environment;
 32 
 33 import android.view.View;
 34 
 35 import android.view.View.OnClickListener;
 36 
 37 import android.widget.Button;
 38 
 39  
 40 
 41 /**
 42 
 43  * @author yangyu 功能描述:主Activity类,程序的入口类
 44 
 45  */
 46 
 47 public class MainActivity extends Activity implements OnClickListener {
 48 
 49 // 定义图片存放的地址
 50 
 51 public static String TEST_IMAGE;
 52 
 53  
 54 
 55 // 定义"账号登陆"按钮,"有分享界面按钮","无分享界面"按钮,"得到用户资料"按钮
 56 
 57 private Button authLoginBtn, shareGuiBtn, shareBtn;
 58 
 59  
 60 
 61 @Override
 62 
 63 protected void onCreate(Bundle savedInstanceState) {
 64 
 65 super.onCreate(savedInstanceState);
 66 
 67 setContentView(R.layout.activity_main);
 68 
 69  
 70 
 71 // 初始化ShareSDK
 72 
 73 AbstractWeibo.initSDK(this);
 74 
 75  
 76 
 77 initImagePath();
 78 
 79  
 80 
 81 initView();
 82 
 83  
 84 
 85 initData();
 86 
 87 }
 88 
 89  
 90 
 91 /**
 92 
 93  * 初始化组件
 94 
 95  */
 96 
 97 private void initView() {
 98 
 99 authLoginBtn = (Button) findViewById(R.id.btnLogin);
100 
101 shareGuiBtn = (Button) findViewById(R.id.btnShareAllGui);
102 
103 shareBtn = (Button) findViewById(R.id.btnShareAll);
104 
105 // getInfoBtn = (Button) findViewById(R.id.btnUserInfo);
106 
107 }
108 
109  
110 
111 /**
112 
113  * 初始化数据
114 
115  */
116 
117 private void initData() {
118 
119 // 设置按钮监听事件
120 
121 authLoginBtn.setOnClickListener(this);
122 
123 shareGuiBtn.setOnClickListener(this);
124 
125 shareBtn.setOnClickListener(this);
126 
127 // getInfoBtn.setOnClickListener(this);
128 
129 }
130 
131  
132 
133 /**
134 
135  * 初始化分享的图片
136 
137  */
138 
139 private void initImagePath() {
140 
141 try {// 判断SD卡中是否存在此文件夹
142 
143 if (Environment.MEDIA_MOUNTED.equals(Environment
144 
145 .getExternalStorageState())
146 
147 && Environment.getExternalStorageDirectory().exists()) {
148 
149 TEST_IMAGE = Environment.getExternalStorageDirectory()
150 
151 .getAbsolutePath() + "/dic.jpg";
152 
153 } else {
154 
155 TEST_IMAGE = getApplication().getFilesDir().getAbsolutePath()
156 
157 + "/dic.jpg";
158 
159 }
160 
161 File file = new File(TEST_IMAGE);
162 
163 // 判断图片是否存此文件夹中
164 
165 if (!file.exists()) {
166 
167 file.createNewFile();
168 
169 Bitmap pic = BitmapFactory.decodeResource(getResources(),
170 
171 R.drawable.dic);
172 
173 FileOutputStream fos = new FileOutputStream(file);
174 
175 pic.compress(CompressFormat.JPEG, 100, fos);
176 
177 fos.flush();
178 
179 fos.close();
180 
181 }
182 
183 } catch (Throwable t) {
184 
185 t.printStackTrace();
186 
187 TEST_IMAGE = null;
188 
189 }
190 
191 }
192 
193  
194 
195 /**
196 
197  * 按钮监听事件
198 
199  */
200 
201 @Override
202 
203 public void onClick(View v) {
204 
205 switch (v.getId()) {
206 
207 case R.id.btnLogin:
208 
209 startActivity(new Intent(MainActivity.this, AuthActivity.class));
210 
211 break;
212 
213 case R.id.btnShareAllGui:
214 
215 showGrid(false);
216 
217 break;
218 
219 case R.id.btnShareAll:
220 
221 showGrid(true);
222 
223 break;
224 
225 // case R.id.btnUserInfo:
226 
227 // // 获取自己的资料
228 
229 // Intent i = new Intent(this, GetInforActivity.class);
230 
231 // startActivity(i);
232 
233 // break;
234 
235  default:
236 
237 break;
238 
239 }
240 
241  
242 
243 }
244 
245  
246 
247 /**
248 
249  * 使用快捷分享完成图文分享
250 
251  */
252 
253 private void showGrid(boolean silent) {
254 
255 Intent i = new Intent(this, ShareAllGird.class);
256 
257 // 分享时Notification的图标
258 
259 i.putExtra("notif_icon", R.drawable.ic_launcher);
260 
261 // 分享时Notification的标题
262 
263 i.putExtra("notif_title", this.getString(R.string.app_name));
264 
265  
266 
267 // title标题,在印象笔记、邮箱、信息、微信(包括好友和朋友圈)、人人网和QQ空间使用,否则可以不提供
268 
269 i.putExtra("title", this.getString(R.string.share));
270 
271 // titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供
272 
273 i.putExtra("titleUrl", "http://sharesdk.cn");
274 
275 // text是分享文本,所有平台都需要这个字段
276 
277 i.putExtra("text", this.getString(R.string.share_content));
278 
279 // imagePath是本地的图片路径,所有平台都支持这个字段,不提供,则表示不分享图片
280 
281 i.putExtra("imagePath", MainActivity.TEST_IMAGE);
282 
283 // url仅在微信(包括好友和朋友圈)中使用,否则可以不提供
284 
285 i.putExtra("url", "http://sharesdk.cn");
286 
287 // thumbPath是缩略图的本地路径,仅在微信(包括好友和朋友圈)中使用,否则可以不提供
288 
289 i.putExtra("thumbPath", MainActivity.TEST_IMAGE);
290 
291 // appPath是待分享应用程序的本地路劲,仅在微信(包括好友和朋友圈)中使用,否则可以不提供
292 
293 i.putExtra("appPath", MainActivity.TEST_IMAGE);
294 
295 // comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供
296 
297 i.putExtra("comment", this.getString(R.string.share));
298 
299 // site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供
300 
301 i.putExtra("site", this.getString(R.string.app_name));
302 
303 // siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供
304 
305 i.putExtra("siteUrl", "http://sharesdk.cn");
306 
307  
308 
309 // 是否直接分享
310 
311 i.putExtra("silent", silent);
312 
313 this.startActivity(i);
314 
315 }
316 
317  
318 
319 /**
320 
321  * 将action转换为String
322 
323  */
324 
325 public static String actionToString(int action) {
326 
327 switch (action) {
328 
329 case AbstractWeibo.ACTION_AUTHORIZING:
330 
331 return "ACTION_AUTHORIZING";
332 
333 case AbstractWeibo.ACTION_GETTING_FRIEND_LIST:
334 
335 return "ACTION_GETTING_FRIEND_LIST";
336 
337 case AbstractWeibo.ACTION_FOLLOWING_USER:
338 
339 return "ACTION_FOLLOWING_USER";
340 
341 case AbstractWeibo.ACTION_SENDING_DIRECT_MESSAGE:
342 
343 return "ACTION_SENDING_DIRECT_MESSAGE";
344 
345 case AbstractWeibo.ACTION_TIMELINE:
346 
347 return "ACTION_TIMELINE";
348 
349 case AbstractWeibo.ACTION_USER_INFOR:
350 
351 return "ACTION_USER_INFOR";
352 
353 case AbstractWeibo.ACTION_SHARE:
354 
355 return "ACTION_SHARE";
356 
357 default: {
358 
359 return "UNKNOWN";
360 
361 }
362 
363 }
364 
365 }
366 
367  
368 
369 protected void onDestroy() {
370 
371 // 结束ShareSDK的统计功能并释放资源
372 
373 AbstractWeibo.stopSDK(this);
374 
375 super.onDestroy();
376 
377 }
378 
379 }

 

,上面是第一个类,然后还有:

  1 package cn.android.share;
  2 
  3  
  4 
  5 import java.util.HashMap;
  6 
  7  
  8 
  9 import cn.android.app.R;
 10 
 11 import cn.sharesdk.framework.AbstractWeibo;
 12 
 13 import cn.sharesdk.framework.TitleLayout;
 14 
 15 import cn.sharesdk.framework.WeiboActionListener;
 16 
 17 import cn.sharesdk.renren.Renren;
 18 
 19 import cn.sharesdk.sina.weibo.SinaWeibo;
 20 
 21 import cn.sharesdk.tencent.qzone.QZone;
 22 
 23 import cn.sharesdk.tencent.weibo.TencentWeibo;
 24 
 25 import android.app.Activity;
 26 
 27 import android.os.Bundle;
 28 
 29 import android.os.Handler;
 30 
 31 import android.os.Handler.Callback;
 32 
 33 import android.os.Message;
 34 
 35 import android.view.View;
 36 
 37 import android.view.View.OnClickListener;
 38 
 39 import android.widget.CheckedTextView;
 40 
 41 import android.widget.Toast;
 42 
 43  
 44 
 45 /**
 46 
 47  * @author yangyu
 48 
 49  * 功能描述:授权和取消授权Activity,由于UI显示需要授权过的平台显示账户的名称,
 50 
 51  *   因此此页面事实上展示的是“获取用户资料”和“取消授权”两个功能。
 52 
 53  */
 54 
 55 public class AuthActivity extends Activity implements Callback, OnClickListener, WeiboActionListener {
 56 
 57 //定义CheckedTextView对象
 58 
 59 private CheckedTextView  sinaCt,qzoneCt,tengxunCt,renrenCt;
 60 
 61  
 62 
 63 //定义Handler对象
 64 
 65 private Handler handler;
 66 
 67  
 68 
 69 //定义标题栏对象
 70 
 71 private TitleLayout llTitle;
 72 
 73  
 74 
 75 @Override
 76 
 77 protected void onCreate(Bundle savedInstanceState) {
 78 
 79 super.onCreate(savedInstanceState);
 80 
 81 setContentView(R.layout.activity_auth);
 82 
 83  
 84 
 85 initView();
 86 
 87  
 88 
 89 initData();
 90 
 91 }
 92 
 93  
 94 
 95 /**
 96 
 97  * 初始化组件
 98 
 99  */
100 
101 private void initView(){
102 
103 //实例化Handler对象并设置信息回调监听接口
104 
105 handler = new Handler(this);
106 
107  
108 
109 //得到标题栏对象
110 
111 llTitle = (TitleLayout) findViewById(R.id.llTitle);
112 
113  
114 
115 //得到组件对象
116 
117 sinaCt    = (CheckedTextView)findViewById(R.id.ctvSw);
118 
119 qzoneCt   = (CheckedTextView)findViewById(R.id.ctvQz);
120 
121 tengxunCt = (CheckedTextView)findViewById(R.id.ctvTc);
122 
123 renrenCt  = (CheckedTextView)findViewById(R.id.ctvRr);
124 
125 }
126 
127  
128 
129 /**
130 
131  * 初始化数据
132 
133  */
134 
135 private void initData(){
136 
137 llTitle.getBtnBack().setOnClickListener(new OnClickListener() {
138 
139 @Override
140 
141 public void onClick(View v) {
142 
143 finish();
144 
145 }
146 
147 });
148 
149 llTitle.getTvTitle().setText("用户授权登录");
150 
151  
152 
153 //设置监听
154 
155 sinaCt.setOnClickListener(this);
156 
157 qzoneCt.setOnClickListener(this);
158 
159 tengxunCt.setOnClickListener(this);
160 
161 renrenCt.setOnClickListener(this);
162 
163  
164 
165 //获取平台列表
166 
167 AbstractWeibo[] weibos = AbstractWeibo.getWeiboList(this);
168 
169  
170 
171 for(int i = 0;i < weibos.length;i++){
172 
173 if (!weibos[i].isValid()) {
174 
175 continue;
176 
177 }
178 
179  
180 
181 CheckedTextView ctv = getView(weibos[i]);
182 
183 if (ctv != null) {
184 
185 ctv.setChecked(true);
186 
187 // 得到授权用户的用户名称
188 
189 String userName = weibos[i].getDb().get("nickname"); 
190 
191 if (userName == null || userName.length() <= 0 || "null".equals(userName)) {
192 
193 // 如果平台已经授权却没有拿到帐号名称,则自动获取用户资料,以获取名称
194 
195 userName = getWeiboName(weibos[i]);
196 
197 //添加平台事件监听
198 
199 weibos[i].setWeiboActionListener(this);
200 
201 //显示用户资料,null表示显示自己的资料
202 
203 weibos[i].showUser(null);
204 
205 }
206 
207 ctv.setText(userName);
208 
209 }
210 
211 }
212 
213 }
214 
215  
216 
217 /**
218 
219  * 在CheckedTextView组件中显示授权用户的名称
220 
221  */
222 
223 private CheckedTextView getView(AbstractWeibo weibo) {
224 
225 if (weibo == null) {
226 
227 return null;
228 
229 }
230 
231  
232 
233 String name = weibo.getName();
234 
235 if (name == null) {
236 
237 return null;
238 
239 }
240 
241  
242 
243 View v = null;
244 
245 if (SinaWeibo.NAME.equals(name)) {
246 
247 v = findViewById(R.id.ctvSw);
248 
249 }
250 
251 else if (TencentWeibo.NAME.equals(name)) {
252 
253 v = findViewById(R.id.ctvTc);
254 
255 }
256 
257 else if (Renren.NAME.equals(name)) {
258 
259 v = findViewById(R.id.ctvRr);
260 
261 }
262 
263 else if (QZone.NAME.equals(name)) {
264 
265 v = findViewById(R.id.ctvQz);
266 
267 }
268 
269  
270 
271 if (v == null) {
272 
273 return null;
274 
275 }
276 
277  
278 
279 if (! (v instanceof CheckedTextView)) {
280 
281 return null;
282 
283 }
284 
285  
286 
287 return (CheckedTextView) v;
288 
289 }
290 
291  
292 
293 /**
294 
295  * 得到授权用户的用户名称
296 
297  */
298 
299 private String getWeiboName(AbstractWeibo weibo) {
300 
301 if (weibo == null) {
302 
303 return null;
304 
305 }
306 
307  
308 
309 String name = weibo.getName();
310 
311 if (name == null) {
312 
313 return null;
314 
315 }
316 
317  
318 
319 int res = 0;
320 
321 if (SinaWeibo.NAME.equals(name)) {
322 
323 res = R.string.sinaweibo;
324 
325 }
326 
327 else if (TencentWeibo.NAME.equals(name)) {
328 
329 res = R.string.tencentweibo;
330 
331 }
332 
333 else if (Renren.NAME.equals(name)) {
334 
335 res = R.string.renren;
336 
337 }
338 
339 else if (QZone.NAME.equals(name)) {
340 
341 res = R.string.qzone;
342 
343 }
344 
345  
346 
347 if (res == 0) {
348 
349 return name;
350 
351 }
352 
353 return this.getResources().getString(res);
354 
355 }
356 
357  
358 
359 /**
360 
361  * 授权和取消授权的按钮点击监听事件
362 
363  */
364 
365 @Override
366 
367 public void onClick(View v) {
368 
369 AbstractWeibo weibo = getWeibo(v.getId());
370 
371  
372 
373 CheckedTextView ctv = (CheckedTextView) v;
374 
375 if (weibo == null) {
376 
377 ctv.setChecked(false);
378 
379 ctv.setText(R.string.not_yet_authorized);
380 
381 return;
382 
383 }
384 
385  
386 
387 if (weibo.isValid()) {
388 
389 weibo.removeAccount();
390 
391 ctv.setChecked(false);
392 
393 ctv.setText(R.string.not_yet_authorized);
394 
395 return;
396 
397 }
398 
399  
400 
401 weibo.setWeiboActionListener(this);
402 
403 weibo.showUser(null);
404 
405 }
406 
407  
408 
409 /**
410 
411  * 获得授权
412 
413  */
414 
415 private AbstractWeibo getWeibo(int vid) {
416 
417 String name = null;
418 
419 switch (vid) {
420 
421 // 进入新浪微博的授权页面
422 
423 case R.id.ctvSw:
424 
425 name = SinaWeibo.NAME;
426 
427 break;
428 
429 // 进入腾讯微博的授权页面
430 
431 case R.id.ctvTc:
432 
433 name = TencentWeibo.NAME;
434 
435 break;
436 
437 // 进入人人网的授权页面
438 
439 case R.id.ctvRr:
440 
441 name = Renren.NAME;
442 
443 break;
444 
445 // 进入QQ空间的授权页面
446 
447 case R.id.ctvQz:
448 
449 name = QZone.NAME;
450 
451 break;
452 
453 }
454 
455  
456 
457 if (name != null) {
458 
459 return AbstractWeibo.getWeibo(this, name);
460 
461 }
462 
463 return null;
464 
465 }
466 
467  
468 
469 /**
470 
471  * 授权成功的回调
472 
473  *  weibo - 回调的平台
474 
475  * action - 操作的类型
476 
477  * res - 请求的数据通过res返回
478 
479  */
480 
481 @Override
482 
483 public void onComplete(AbstractWeibo weibo, int action,
484 
485 HashMap<String, Object> arg2) {
486 
487 Message msg = new Message();
488 
489 msg.arg1 = 1;
490 
491 msg.arg2 = action;
492 
493 msg.obj = weibo;
494 
495 handler.sendMessage(msg);
496 
497  
498 
499 }
500 
501 /**
502 
503  * 授权失败的回调
504 
505  */
506 
507 @Override
508 
509 public void onError(AbstractWeibo weibo, int action, Throwable t) {
510 
511 t.printStackTrace();
512 
513  
514 
515 Message msg = new Message();
516 
517 msg.arg1 = 2;
518 
519 msg.arg2 = action;
520 
521 msg.obj = weibo;
522 
523 handler.sendMessage(msg);
524 
525 }
526 
527  
528 
529 /**
530 
531  * 取消授权的回调
532 
533  */
534 
535 @Override
536 
537 public void onCancel(AbstractWeibo weibo, int action) {
538 
539 Message msg = new Message();
540 
541 msg.arg1 = 3;
542 
543 msg.arg2 = action;
544 
545 msg.obj = weibo;
546 
547 handler.sendMessage(msg);
548 
549 }
550 
551  
552 
553 /** 
554 
555  * 处理从授权页面返回的结果
556 
557  * 
558 
559  * 如果获取到用户的名称,则显示名称;否则如果已经授权,则显示平台名称
560 
561  */
562 
563 @Override
564 
565 public boolean handleMessage(Message msg) {
566 
567 AbstractWeibo weibo = (AbstractWeibo) msg.obj;
568 
569 String text = MainActivity.actionToString(msg.arg2);
570 
571  
572 
573 switch (msg.arg1) {
574 
575 case 1: { // 成功
576 
577 text = weibo.getName() + " completed at " + text;
578 
579 Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
580 
581 }
582 
583 break;
584 
585 case 2: { // 失败
586 
587 text = weibo.getName() + " caught error at " + text;
588 
589 Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
590 
591 return false;
592 
593 }
594 
595 case 3: { // 取消
596 
597 text = weibo.getName() + " canceled at " + text;
598 
599 Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
600 
601 return false;
602 
603 }
604 
605 }
606 
607  
608 
609 CheckedTextView ctv = getView(weibo);
610 
611 if (ctv != null) {
612 
613 ctv.setChecked(true);
614 
615 String userName = weibo.getDb().get("nickname"); // getAuthedUserName();
616 
617 if (userName == null || userName.length() <= 0
618 
619 || "null".equals(userName)) {
620 
621 userName = getWeiboName(weibo);
622 
623 }
624 
625 ctv.setText(userName);
626 
627 }
628 
629 return false;
630 
631 }
632 
633  
634 
635 }

 

,当然在这里我们还需要一个辅助类(解析)

  1 package cn.android.share;
  2 
  3  
  4 
  5 import java.util.ArrayList;
  6 
  7 import java.util.HashMap;
  8 
  9 import java.util.Iterator;
 10 
 11 import java.util.Map.Entry;
 12 
 13 import org.json.JSONArray;
 14 
 15 import org.json.JSONException;
 16 
 17 import org.json.JSONObject;
 18 
 19  
 20 
 21 /**
 22 
 23  * @author yangyu
 24 
 25  * 功能描述:这是一个简易的Json-HashMap转换工具,可以将普通的json数据(字符串)
 26 
 27  * 转换为一个HashMap<Srting, Object>表格,也可以反过来操作。此外还支
 28 
 29  * 持将json数据格式化。
 30 
 31  */
 32 
 33 public class JsonUtils {
 34 
 35  
 36 
 37 /**
 38 
 39  * 将指定的json数据转成 HashMap<String, Object>对象
 40 
 41  */
 42 
 43 public HashMap<String, Object> fromJson(String jsonStr) {
 44 
 45 try {
 46 
 47 if (jsonStr.startsWith("[")
 48 
 49 && jsonStr.endsWith("]")) {
 50 
 51 jsonStr = "{\"fakelist\":" + jsonStr + "}";
 52 
 53 }
 54 
 55  
 56 
 57 JSONObject json = new JSONObject(jsonStr);
 58 
 59 return fromJson(json);
 60 
 61 } catch (Throwable t) {
 62 
 63 t.printStackTrace();
 64 
 65 }
 66 
 67 return new HashMap<String, Object>();
 68 
 69 }
 70 
 71  
 72 
 73 private HashMap<String, Object> fromJson(JSONObject json) throws JSONException {
 74 
 75 HashMap<String, Object> map = new HashMap<String, Object>();
 76 
 77 @SuppressWarnings("unchecked")
 78 
 79 Iterator<String> iKey = json.keys();
 80 
 81 while(iKey.hasNext()) {
 82 
 83 String key = iKey.next();
 84 
 85 Object value = json.opt(key);
 86 
 87 if (JSONObject.NULL.equals(value)) {
 88 
 89 value = null;
 90 
 91 }
 92 
 93 if (value != null) {
 94 
 95 if (value instanceof JSONObject) {
 96 
 97 value = fromJson((JSONObject)value);
 98 
 99 }
100 
101 else if (value instanceof JSONArray) {
102 
103 value = fromJson((JSONArray)value);
104 
105 }
106 
107 map.put(key, value);
108 
109 }
110 
111 }
112 
113 return map;
114 
115 }
116 
117  
118 
119 private ArrayList<Object> fromJson(JSONArray array) 
120 
121 throws JSONException {
122 
123 ArrayList<Object> list = new ArrayList<Object>();
124 
125 for (int i = 0, size = array.length(); i < size; i++) {
126 
127 Object value = array.opt(i);
128 
129 if (value instanceof JSONObject) {
130 
131 value = fromJson((JSONObject)value);
132 
133 }
134 
135 else if (value instanceof JSONArray) {
136 
137 value = fromJson((JSONArray)value);
138 
139 }
140 
141 list.add(value);
142 
143 }
144 
145 return list;
146 
147 }
148 
149  
150 
151 /**
152 
153  * 将指定的HashMap<String, Object>对象转成json数据 
154 
155  */
156 
157 public String fromHashMap(HashMap<String, Object> map) {
158 
159 try {
160 
161 return getJSONObject(map).toString();
162 
163 } catch (Throwable t) {
164 
165 t.printStackTrace();
166 
167 }
168 
169 return "";
170 
171 }
172 
173  
174 
175 @SuppressWarnings("unchecked")
176 
177 private JSONObject getJSONObject(HashMap<String, Object> map) 
178 
179 throws JSONException {
180 
181 JSONObject json = new JSONObject();
182 
183 for (Entry<String, Object> entry : map.entrySet()) {
184 
185 Object value = entry.getValue();
186 
187 if (value instanceof HashMap<?, ?>) {
188 
189 value = getJSONObject((HashMap<String, Object>)value);
190 
191 }
192 
193 else if (value instanceof ArrayList<?>) {
194 
195 value = getJSONArray((ArrayList<Object>)value);
196 
197 }
198 
199 json.put(entry.getKey(), value);
200 
201 }
202 
203 return json;
204 
205 }
206 
207  
208 
209 @SuppressWarnings("unchecked")
210 
211 private JSONArray getJSONArray(ArrayList<Object> list) 
212 
213 throws JSONException {
214 
215 JSONArray array = new JSONArray();
216 
217 for (Object value : list) {
218 
219 if (value instanceof HashMap<?, ?>) {
220 
221 value = getJSONObject((HashMap<String, Object>)value);
222 
223 }
224 
225 else if (value instanceof ArrayList<?>) {
226 
227 value = getJSONArray((ArrayList<Object>)value);
228 
229 }
230 
231 array.put(value);
232 
233 }
234 
235 return array;
236 
237 }
238 
239  
240 
241 /**
242 
243  * 格式化一个json串
244 
245  */
246 
247 public String format(String jsonStr) {
248 
249 try {
250 
251 return format("", fromJson(jsonStr));
252 
253 } catch (Throwable t) {
254 
255 t.printStackTrace();
256 
257 }
258 
259 return "";
260 
261 }
262 
263  
264 
265 @SuppressWarnings("unchecked")
266 
267 private String format(String sepStr, HashMap<String, Object> map) {
268 
269 StringBuffer sb = new StringBuffer();
270 
271 sb.append("{\n");
272 
273 String mySepStr = sepStr + "\t";
274 
275 int i = 0;
276 
277 for (Entry<String, Object> entry : map.entrySet()) {
278 
279 if (i > 0) {
280 
281 sb.append(",\n");
282 
283 }
284 
285 sb.append(mySepStr).append('\"').append(entry.getKey()).append("\":");
286 
287 Object value = entry.getValue();
288 
289 if (value instanceof HashMap<?, ?>) {
290 
291 sb.append(format(mySepStr, (HashMap<String, Object>)value));
292 
293 }
294 
295 else if (value instanceof ArrayList<?>) {
296 
297 sb.append(format(mySepStr, (ArrayList<Object>)value));
298 
299 }
300 
301 else if (value instanceof String) {
302 
303 sb.append('\"').append(value).append('\"');
304 
305 }
306 
307 else {
308 
309 sb.append(value);
310 
311 }
312 
313 i++;
314 
315 }
316 
317 sb.append('\n').append(sepStr).append('}');
318 
319 return sb.toString();
320 
321 }
322 
323  
324 
325 @SuppressWarnings("unchecked")
326 
327 private String format(String sepStr, ArrayList<Object> list) {
328 
329 StringBuffer sb = new StringBuffer();
330 
331 sb.append("[\n");
332 
333 String mySepStr = sepStr + "\t";
334 
335 int i = 0;
336 
337 for (Object value : list) {
338 
339 if (i > 0) {
340 
341 sb.append(",\n");
342 
343 }
344 
345 sb.append(mySepStr);
346 
347 if (value instanceof HashMap<?, ?>) {
348 
349 sb.append(format(mySepStr, (HashMap<String, Object>)value));
350 
351 }
352 
353 else if (value instanceof ArrayList<?>) {
354 
355 sb.append(format(mySepStr, (ArrayList<Object>)value));
356 
357 }
358 
359 else if (value instanceof String) {
360 
361 sb.append('\"').append(value).append('\"');
362 
363 }
364 
365 else {
366 
367 sb.append(value);
368 
369 }
370 
371 i++;
372 
373 }
374 
375 sb.append('\n').append(sepStr).append(']');
376 
377 return sb.toString();
378 
379 }
380 
381  
382 
383 }

 

。好了,可能大家也会有迷糊,但是我贴出了源文件。

 

posted @ 2014-02-11 08:08  Catherine_Brain  阅读(972)  评论(0编辑  收藏  举报