• 获取第三方的授权


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

    这里我会将代码贴出来:

      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("{
    ");
    272 
    273 String mySepStr = sepStr + "	";
    274 
    275 int i = 0;
    276 
    277 for (Entry<String, Object> entry : map.entrySet()) {
    278 
    279 if (i > 0) {
    280 
    281 sb.append(",
    ");
    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('
    ').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("[
    ");
    332 
    333 String mySepStr = sepStr + "	";
    334 
    335 int i = 0;
    336 
    337 for (Object value : list) {
    338 
    339 if (i > 0) {
    340 
    341 sb.append(",
    ");
    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('
    ').append(sepStr).append(']');
    376 
    377 return sb.toString();
    378 
    379 }
    380 
    381  
    382 
    383 }

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

     

    一切只是为了充实自己!!stay hungry and stay foolish!!
  • 相关阅读:
    七牛php-sdk使用
    七牛php-sdk使用-多媒体处理
    七牛php-sdk使用-文档处理
    七牛php-sdk使用-文件上传
    php爬取微信文章内容
    php解决微信文章图片防盗链
    python2.7编译安装升级python3并安装Scrapy
    centos7安装配置supervisor守护进程
    vuejs+thinkphp5+phpsocketIO+timer数据及时更新
    docker常用命令
  • 原文地址:https://www.cnblogs.com/Catherine-Brain/p/3543772.html
Copyright © 2020-2023  润新知