Android客户端与服务器端的json数据交互(很详细)

Android学习笔记:在Android平台上通过JSON格式与服务器端进行数据交互 要求: Android编写一个登录界面,输入用户名和密码,使用JSON格式提交到服务器端。 服务器端收到后返回(JSON格式数据): “输入的用户”+您好,你已成功登录系统。 其实不管是JSON还是其他类型,都是为了满足Android与服务器端的程序进行数据交换的要求而已 本次笔记的个人觉得重点如下: 1.服务器端的数据接收  1)包括数据编码的设定 发送与接受最好都用ut 阅读详情

Android客户端与服务器端的json数据交互,主要是通过json形式的数据交互,就是json的写入和解析。

 先看效果图,我最讨厌讲东西,一个图没有的。


算了,看来我不是写博客的材料,写不下去了,要排版之类的麻烦,大家还是直接去下载源码,里面有大量的注视,应该能看懂。 下载地址:源码下载地址


登录界面:很传统的随便做了一下:



用的是android4.0的,别人说这样的EditText很有科技感。


注册界面:


也是很传统的,文本框之类的 。


下面看看包名,类名图。(忙着和比人聊天了,差点忘了) 现在继续

客户端的:


服务器端的:


下面贴上客户端的代码:

LoginRegisterActivity.java

[java]  view plain copy print ?
  1. <span style="font-size:18px;color:#999900;">package com.gem.hsx.activity;  
  2.   
  3. import com.gem.hsx.operation.Operaton;  
  4.   
  5. import android.app.Activity;  
  6. import android.app.ProgressDialog;  
  7. import android.content.Intent;  
  8. import android.os.Bundle;  
  9. import android.os.Handler;  
  10. import android.os.Message;  
  11. import android.view.View;  
  12. import android.view.View.OnClickListener;  
  13. import android.widget.Button;  
  14. import android.widget.EditText;  
  15. import android.widget.Toast;  
  16.   
  17. //此为主activity的实现登录的。在android2.3以后,android规定了主activity不允许在主线程中做一些耗时较多的  
  18. //操作,包括网络的操作,主要是减少应用程序停止响应的问题。下面注释掉的部分是网上找到的方法,加上之后就可以在主线程中  
  19. //进行联网操作了,但是本人采用了线程的操作,未采用该方法  
  20. public class LoginRegisterActivity extends Activity {  
  21.     Button login;  
  22.     Button register;  
  23.     EditText etusername;  
  24.     EditText etpassword;  
  25.     String username;  
  26.     String password;  
  27.     ProgressDialog p;  
  28.     @Override  
  29.     public void onCreate(Bundle savedInstanceState) {  
  30.         super.onCreate(savedInstanceState);  
  31.         setContentView(R.layout.main);  
  32.   
  33. //      StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()         
  34. //      .detectDiskReads()         
  35. //      .detectDiskWrites()         
  36. //      .detectNetwork()   // or .detectAll() for all detectable problems         
  37. //      .penaltyLog()         
  38. //      .build());         
  39. //      StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()         
  40. //      .detectLeakedSqlLiteObjects()      
  41. //      .penaltyLog()         
  42. //      .penaltyDeath()         
  43. //      .build());     
  44.   
  45.   
  46.   
  47.         init();  
  48.         register.setOnClickListener(new RegisterOnclick());  
  49.         login.setOnClickListener(new LoginOnclick());  
  50.     }  
  51.     private void init()   
  52.     {  
  53.         etusername=(EditText) findViewById(R.id.etusername);  
  54.         etpassword=(EditText) findViewById(R.id.etpassword);  
  55.         login=(Button) findViewById(R.id.login);  
  56.         register=(Button) findViewById(R.id.register);  
  57.         p=new ProgressDialog(LoginRegisterActivity.this);  
  58.         p.setTitle("登录中");  
  59.         p.setMessage("登录中,马上就好");  
  60.     }  
  61.     private class RegisterOnclick implements OnClickListener  
  62.     {  
  63.         public void onClick(View v) {  
  64.             Intent intent=new Intent();  
  65.             intent.setClass(LoginRegisterActivity.this, Register.class);  
  66.             startActivity(intent);  
  67.         }  
  68.   
  69.     }  
  70.     private class LoginOnclick implements OnClickListener  
  71.     {  
  72.         public void onClick(View arg0) {  
  73.             username=etusername.getText().toString().trim();  
  74.             if (username==null||username.length()<=0)   
  75.             {         
  76.                 etusername.requestFocus();  
  77.                 etusername.setError("对不起,用户名不能为空");  
  78.                 return;  
  79.             }  
  80.             else   
  81.             {  
  82.                 username=etusername.getText().toString().trim();  
  83.             }  
  84.             password=etpassword.getText().toString().trim();  
  85.             if (password==null||password.length()<=0)   
  86.             {         
  87.                 etpassword.requestFocus();  
  88.                 etpassword.setError("对不起,密码不能为空");  
  89.                 return;  
  90.             }  
  91.             else   
  92.             {  
  93.                 password=etpassword.getText().toString().trim();  
  94.             }  
  95.             p.show();  
  96.             new Thread(new Runnable() {  
  97.   
  98.                 public void run() {  
  99.                     Operaton operaton=new Operaton();  
  100.                     String result=operaton.login("Login", username, password);                
  101.                     Message msg=new Message();  
  102.                     msg.obj=result;  
  103.                     handler.sendMessage(msg);  
  104.                 }  
  105.             }).start();  
  106.   
  107.         }  
  108.     }     
  109.     Handler handler=new Handler(){  
  110.         @Override  
  111.         public void handleMessage(Message msg) {  
  112.             String string=(String) msg.obj;  
  113.             p.dismiss();  
  114.             Toast.makeText(LoginRegisterActivity.this, string, 0).show();  
  115.             super.handleMessage(msg);  
  116.         }     
  117.     };  
  118.       
  119. }</span>  

Register.java

[java]  view plain copy print ?
  1. <span style="font-size:18px;">package com.gem.hsx.activity;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.InputStream;  
  7. import java.util.ArrayList;  
  8. import java.util.List;  
  9.   
  10. import com.gem.hsx.bean.User;  
  11. import com.gem.hsx.json.WriteJson;  
  12. import com.gem.hsx.operation.Operaton;  
  13.   
  14. import android.app.Activity;  
  15. import android.app.AlertDialog;  
  16. import android.app.Dialog;  
  17. import android.app.ProgressDialog;  
  18. import android.content.DialogInterface;  
  19. import android.content.Intent;  
  20. import android.graphics.Bitmap;  
  21. import android.graphics.BitmapFactory;  
  22. import android.net.Uri;  
  23. import android.os.Bundle;  
  24. import android.os.Handler;  
  25. import android.os.Message;  
  26. import android.view.View;  
  27. import android.view.View.OnClickListener;  
  28. import android.view.View.OnFocusChangeListener;  
  29. import android.widget.Button;  
  30. import android.widget.EditText;  
  31. import android.widget.ImageView;  
  32. import android.widget.RadioButton;  
  33. import android.widget.Toast;  
  34.   
  35.   
  36. public class Register extends Activity {  
  37.     Button submit;  
  38.     Button select;  
  39.     EditText etusername;  
  40.     EditText etpassword;  
  41.     RadioButton ckman;  
  42.     RadioButton ckwoman;  
  43.     EditText etage;  
  44.     ImageView imgphoto;  
  45.     String str;  
  46.     String filepath=null;  
  47.     String jsonString=null;  
  48.     ProgressDialog dialog;  
  49.     private static final int REQUEST_EX = 1;  
  50.     String username=null;  
  51.     String password=null;  
  52.     String sex=null;  
  53.     String age=null;  
  54.     @Override  
  55.     protected void onCreate(Bundle savedInstanceState) {  
  56.         super.onCreate(savedInstanceState);  
  57.         setContentView(R.layout.register);  
  58.         init();  
  59.         //etusername.addTextChangedListener(new MyTextWatcher());  
  60.         etusername.setOnFocusChangeListener(new EtusernameOnFocusChange());  
  61.         select.setOnClickListener(new SelectOnclick());  
  62.         submit.setOnClickListener(new SubmitOnclick());  
  63.     }  
  64.     private void init()  
  65.     {  
  66.         submit=(Button) findViewById(R.id.submit);  
  67.         select=(Button) findViewById(R.id.select);  
  68.         etusername=(EditText) findViewById(R.id.etusername);  
  69.         etpassword=(EditText) findViewById(R.id.etpassword);  
  70.         ckman=(RadioButton) findViewById(R.id.ckman);  
  71.         ckwoman=(RadioButton) findViewById(R.id.ckwoman);  
  72.         etage=(EditText) findViewById(R.id.etage);  
  73.         imgphoto=(ImageView) findViewById(R.id.imgphoto);  
  74.         dialog=new ProgressDialog(Register.this);  
  75.         dialog.setTitle("上传数据中");  
  76.         dialog.setMessage("请稍等...");  
  77.     }  
  78.   
  79.     //  private   class MyTextWatcher implements TextWatcher  
  80.     //  {  
  81.     //  
  82.     //      public void afterTextChanged(Editable s) {  
  83.     //           str=etusername.getText().toString().trim();  
  84.     //           if (str==null||str.length()<=0)   
  85.     //           {  
  86.     //              etusername.setError("用户名不能为空");  
  87.     //           }  
  88.     //           else   
  89.     //           {    
  90.     //               new Thread(new Runnable() {  
  91.     //                    
  92.     //                  public void run() {  
  93.     //                       Operaton operaton=new Operaton();  
  94.     //                       String result= operaton.checkusername("Check", str);  
  95.     //                       Message message=new Message();  
  96.     //                       message.obj=result;  
  97.     //                       handler.sendMessage(message);  
  98.     //                  }  
  99.     //              }).start();  
  100.     //                 
  101.     //               
  102.     //            }  
  103.     //      }  
  104.     //      public void beforeTextChanged(CharSequence s, int start, int count,  
  105.     //              int after) {  
  106.     //            
  107.     //      }  
  108.     //  
  109.     //      public void onTextChanged(CharSequence s, int start, int before,  
  110.     //              int count) {  
  111.     //        
  112.     //      }  
  113.     //        
  114.     //  }  
  115.     //  Handler handler=new Handler()  
  116.     //  {  
  117.     //      @Override  
  118.     //      public void handleMessage(Message msg) {  
  119.     //          String msgobj=msg.obj.toString();  
  120.     //          if (msgobj=="该用户名可用")   
  121.     //          {  
  122.     //              etusername.setFocusable(false);  
  123.     //          }  
  124.     //          else   
  125.     //          {  
  126.     //              etusername.requestFocus();  
  127.     //              etusername.setError(msgobj);  
  128.     //          }         
  129.     //          super.handleMessage(msg);  
  130.     //      }     
  131.     //  };  
  132.     //    
  133.     private class EtusernameOnFocusChange implements OnFocusChangeListener  
  134.     {  
  135.         public void onFocusChange(View v, boolean hasFocus) {  
  136.             if (!etusername.hasFocus()) {  
  137.                 str=etusername.getText().toString().trim();  
  138.                 if (str==null||str.length()<=0)   
  139.                 {  
  140.                     etusername.setError("用户名不能为空");  
  141.                 }  
  142.                 else   
  143.                 {     
  144.                     new Thread(new Runnable() {  
  145.                  //如果用户名不为空,那么将用户名提交到服务器上进行验证,看用户名是否存在,就像JavaEE中利用  
  146.                 //ajax一样,虽然你看不到但是它却偷偷摸摸做了很多  
  147.                         public void run() {  
  148.                             Operaton operaton=new Operaton();  
  149.                             String result= operaton.checkusername("Check", str);  
  150.                             System.out.println("result:"+result);  
  151.                             Message message=new Message();  
  152.                             message.obj=result;  
  153.                             handler.sendMessage(message);  
  154.                         }  
  155.                     }).start();  
  156.                 }  
  157.             }  
  158.         }  
  159.     }  
  160.     Handler handler=new Handler()  
  161.     {  
  162.         @Override  
  163.         public void handleMessage(Message msg) {  
  164.             String msgobj=msg.obj.toString();  
  165.             System.out.println(msgobj);  
  166.             System.out.println(msgobj.length());  
  167.   
  168.             if (msgobj.equals("t")) {    
  169.                 etusername.requestFocus();  
  170.                 etusername.setError("用户名"+str+"已存在");  
  171.             }     
  172.             else   
  173.             {                         
  174.                 etpassword.requestFocus();  
  175.             }  
  176.             super.handleMessage(msg);  
  177.         }     
  178.     };  
  179.     private class SelectOnclick implements OnClickListener  
  180.     {  
  181.         public void onClick(View v) {  
  182.   
  183.             Intent intent = new Intent();  
  184.             intent.putExtra("explorer_title",  
  185.                     getString(R.string.dialog_read_from_dir));  
  186.             intent.setDataAndType(Uri.fromFile(new File("/sdcard")), "*/*");  
  187.             intent.setClass(Register.this, ExDialog.class);  
  188.             startActivityForResult(intent, REQUEST_EX);  
  189.         }  
  190.     }  
  191.     protected void onActivityResult(int requestCode, int resultCode,  
  192.             Intent intent) {  
  193.         if (resultCode == RESULT_OK) {  
  194.   
  195.             Uri uri = intent.getData();  
  196.             filepath=uri.toString().substring(6);  
  197.             System.out.println(filepath);  
  198.             //用户的头像是不是图片格式  
  199.             if(filepath.endsWith("jpg")||filepath.endsWith("png"))  
  200.             {  
  201.                 File file=new File(filepath);  
  202.                 try {  
  203.                     InputStream inputStream=new FileInputStream(file);  
  204.                     Bitmap bitmap = BitmapFactory.decodeStream(inputStream);  
  205.                     imgphoto.setImageBitmap(bitmap);//如果是就将图片显示出来  
  206.                 } catch (FileNotFoundException e) {  
  207.                     e.printStackTrace();  
  208.                 }  
  209.                 submit.setClickable(true);  
  210.             }  
  211.             else  
  212.             {  
  213.                 submit.setClickable(false);  
  214.                 alert();  
  215.             }  
  216.   
  217.         }  
  218.     }  
  219.   
  220.     private class SubmitOnclick implements OnClickListener  
  221.     {  
  222.         public void onClick(View v) {  
  223.             username=etusername.getText().toString().trim();  
  224.             password=etpassword.getText().toString().trim();  
  225.   
  226.             if (ckman.isChecked()) {  
  227.                 sex="男";  
  228.             }  
  229.             else {  
  230.                 sex="女";  
  231.             }  
  232.             age=etage.getText().toString().trim();  
  233.             if (age==null||age.length()<=0)   
  234.             {    
  235.                 etage.requestFocus();  
  236.                 etage.setError("年龄不能为空");             
  237.                 return ;  
  238.             }  
  239.   
  240.             dialog.show();  
  241.             new Thread(new Runnable() {  
  242.   
  243.                 public void run() {  
  244.   
  245.                     Operaton operaton=new Operaton();  
  246.                     File file=new File(filepath);  
  247.                     String photo=operaton.uploadFile(file, "ImgReciver");  
  248.                     //先进行图片上传的操作,然后服务器返回图片保存在服务器的路径,  
  249.                     System.out.println("photo---->"+photo);  
  250.                     System.out.println("sex:------>"+sex);  
  251.                     User user=new User(username, password, sex, age,photo);  
  252.                     //构造一个user对象  
  253.                     List<User> list=new ArrayList<User>();  
  254.                     list.add(user);  
  255.                     WriteJson writeJson=new WriteJson();  
  256.                     //将user对象写出json形式字符串  
  257.                     jsonString= writeJson.getJsonData(list);  
  258.                     System.out.println(jsonString);   
  259.                     String result= operaton.UpData("Register", jsonString);  
  260.                     Message msg=new Message();  
  261.                     System.out.println("result---->"+result);  
  262.                     msg.obj=result;  
  263.                     handler1.sendMessage(msg);  
  264.                 }  
  265.             }).start();  
  266.   
  267.         }  
  268.     }  
  269.     private void alert()  
  270.     {  
  271.         Dialog dialog = new AlertDialog.Builder(this)  
  272.         .setTitle("提示")  
  273.         .setMessage("您选择的不是有效的图片")  
  274.         .setPositiveButton("确定",  
  275.                 new DialogInterface.OnClickListener() {  
  276.             public void onClick(DialogInterface dialog,  
  277.                     int which) {  
  278.                 filepath = null;  
  279.             }  
  280.         })  
  281.         .create();  
  282.         dialog.show();  
  283.     }  
  284.     Handler handler1=new Handler()  
  285.     {  
  286.         @Override  
  287.         public void handleMessage(Message msg) {  
  288.             dialog.dismiss();  
  289.             String msgobj=msg.obj.toString();  
  290.             if(msgobj.equals("t"))  
  291.             {  
  292.                 Toast.makeText(Register.this, "注册成功", 0).show();  
  293.                 Intent intent=new Intent();  
  294.                 intent.setClass(Register.this, LoginRegisterActivity.class);  
  295.                 startActivity(intent);  
  296.             }  
  297.             else {  
  298.                 Toast.makeText(Register.this, "注册失败", 0).show();  
  299.             }  
  300.             super.handleMessage(msg);  
  301.         }     
  302.     };  
  303. }</span>  
ExDialog.java


[java]  view plain copy print ?
  1. package com.gem.hsx.activity;  
  2.   
  3.   
  4. import java.io.File;  
  5. import java.util.ArrayList;  
  6. import java.util.HashMap;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9.   
  10.   
  11. import android.app.ListActivity;  
  12. import android.content.Context;  
  13. import android.content.Intent;  
  14. import android.net.Uri;  
  15. import android.os.Bundle;  
  16. import android.util.Log;  
  17. import android.view.Display;  
  18. import android.view.LayoutInflater;  
  19. import android.view.View;  
  20. import android.view.ViewGroup;  
  21. import android.view.WindowManager;  
  22. import android.view.WindowManager.LayoutParams;  
  23. import android.widget.BaseAdapter;  
  24. import android.widget.ImageView;  
  25. import android.widget.ListView;  
  26. import android.widget.TextView;  
  27.   
  28.   
  29. import com.gem.hsx.activity.R;  
  30. //由于安卓模拟器里面没有文件浏览器,所以构建一个文件浏览器的对话框 主要是dialog和listview配合  
  31. //此是一个简单的浏览器主要目的是选择文件后获取文件的路径,借鉴了一些其他人的文件浏览器的写法  
  32. public class ExDialog extends ListActivity {  
  33.     private List<Map<String, Object>> mData;  
  34.     private String mDir = "/sdcard";  
  35.   
  36.   
  37.     @Override  
  38.     protected void onCreate(Bundle savedInstanceState) {  
  39.         super.onCreate(savedInstanceState);  
  40.   
  41.   
  42.         Intent intent = this.getIntent();  
  43.         Bundle bl = intent.getExtras();  
  44.         String title = bl.getString("explorer_title");  
  45.         Uri uri = intent.getData();  
  46.         mDir = uri.getPath();  
  47.   
  48.   
  49.         setTitle(title);  
  50.         mData = getData();  
  51.         MyAdapter adapter = new MyAdapter(this);  
  52.         setListAdapter(adapter);  
  53.   
  54.   
  55.         WindowManager m = getWindowManager();  
  56.         Display d = m.getDefaultDisplay();  
  57.         LayoutParams p = getWindow().getAttributes();  
  58.         p.height = (int) (d.getHeight() * 0.8);  
  59.         p.width = (int) (d.getWidth() * 0.95);  
  60.         getWindow().setAttributes(p);  
  61.     }  
  62.   
  63.   
  64.     private List<Map<String, Object>> getData() {  
  65.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  66.         Map<String, Object> map = null;  
  67.         File f = new File(mDir);  
  68.         File[] files = f.listFiles();  
  69.   
  70.   
  71.         if (!mDir.equals("/sdcard")) {  
  72.             map = new HashMap<String, Object>();  
  73.             map.put("title", "返回上一级目录/");  
  74.             map.put("info", f.getParent());  
  75.             map.put("img", R.drawable.ex_folder);  
  76.             list.add(map);  
  77.         }  
  78.         if (files != null) {  
  79.             for (int i = 0; i < files.length; i++) {  
  80.                 map = new HashMap<String, Object>();  
  81.                 map.put("title", files[i].getName());  
  82.                 map.put("info", files[i].getPath());  
  83.                 if (files[i].isDirectory())  
  84.                     map.put("img", R.drawable.ex_folder);  
  85.                 else  
  86.                     map.put("img", R.drawable.ex_doc);  
  87.                 list.add(map);  
  88.             }  
  89.         }  
  90.         return list;  
  91.     }  
  92.   
  93.   
  94.     @Override  
  95.     protected void onListItemClick(ListView l, View v, int position, long id) {  
  96.         Log.d("MyListView4-click", (String) mData.get(position).get("info"));  
  97.         if ((Integer) mData.get(position).get("img") == R.drawable.ex_folder) {  
  98.             mDir = (String) mData.get(position).get("info");  
  99.             mData = getData();  
  100.             MyAdapter adapter = new MyAdapter(this);  
  101.             setListAdapter(adapter);  
  102.         } else {  
  103.             finishWithResult((String) mData.get(position).get("info"));  
  104.         }  
  105.     }  
  106.   
  107.   
  108.     public final class ViewHolder {  
  109.         public ImageView img;  
  110.         public TextView title;  
  111.         public TextView info;  
  112.     }  
  113.   
  114.   
  115.     public class MyAdapter extends BaseAdapter {  
  116.         private LayoutInflater mInflater;  
  117.   
  118.   
  119.         public MyAdapter(Context context) {  
  120.             this.mInflater = LayoutInflater.from(context);  
  121.         }  
  122.   
  123.   
  124.         public int getCount() {  
  125.             return mData.size();  
  126.         }  
  127.   
  128.   
  129.         public Object getItem(int arg0) {  
  130.             return null;  
  131.         }  
  132.   
  133.   
  134.         public long getItemId(int arg0) {  
  135.             return 0;  
  136.         }  
  137.   
  138.   
  139.         public View getView(int position, View convertView, ViewGroup parent) {  
  140.             ViewHolder holder = null;  
  141.             if (convertView == null) {  
  142.                 holder = new ViewHolder();  
  143.                 convertView = mInflater.inflate(R.layout.listview, null);  
  144.                 holder.img = (ImageView) convertView.findViewById(R.id.img);  
  145.                 holder.title = (TextView) convertView.findViewById(R.id.title);  
  146.                 //  holder.info = (TextView) convertView.findViewById(R.id.info);  
  147.                 convertView.setTag(holder);  
  148.             } else {  
  149.                 holder = (ViewHolder) convertView.getTag();  
  150.             }  
  151.   
  152.   
  153.             holder.img.setBackgroundResource((Integer) mData.get(position).get(  
  154.             "img"));  
  155.             holder.title.setText((String) mData.get(position).get("title"));  
  156.             //holder.info.setText((String) mData.get(position).get("info"));  
  157.             return convertView;  
  158.         }  
  159.     }  
  160.   
  161.   
  162.     private void finishWithResult(String path) {  
  163.         Bundle conData = new Bundle();  
  164.         conData.putString("results", "Thanks Thanks");  
  165.         Intent intent = new Intent();  
  166.         intent.putExtras(conData);  
  167.         Uri startDir = Uri.fromFile(new File(path));  
  168.         intent.setDataAndType(startDir,  
  169.         "vnd.android.cursor.dir/lysesoft.andexplorer.file");  
  170.         setResult(RESULT_OK, intent);  
  171.         finish();  
  172.     }  
  173. };  

JsonUtil.java

[java]  view plain copy print ?
  1. <pre name="code" class="java">package com.gem.hsx.json;  
  2.   
  3.   
  4. import java.lang.reflect.Type;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7. import com.google.gson.Gson;  
  8. import com.google.gson.reflect.TypeToken;  
  9.   
  10.   
  11.   
  12.   
  13. public class JsonUtil {  
  14.     public List<?> StringFromJson (String jsondata)  
  15.     {       
  16.         Type listType = new TypeToken<List<?>>(){}.getType();  
  17.         Gson gson=new Gson();  
  18.         ArrayList<?> list=gson.fromJson(jsondata, listType);  
  19.         return list;  
  20.   
  21.   
  22.     }  
  23. }</pre><br>  
  24. <pre></pre>  
  25. <p></p>  
  26. WriteJson.java  
  27. <p><span style="font-size:18px"></span></p>  
  28. <pre name="code" class="java">package com.gem.hsx.json;  
  29.   
  30. import java.util.List;  
  31. import com.google.gson.Gson;  
  32.   
  33. public class WriteJson {  
  34.     /* 
  35.      * 通过引入gson jar包 写入 json 数据 
  36.      */  
  37.     public String getJsonData(List<?> list)  
  38.     {  
  39. //此处要注意,时常会出现说找不到Gson类的情况,这时我们只需要将导入的包和系统提供换换顺序就行了  
  40.         Gson gson=new Gson();//利用google提供的gson将一个list集合写成json形式的字符串  
  41.         String jsonstring=gson.toJson(list);  
  42.         return jsonstring;  
  43.     }  
  44.     /* 
  45.      * 当然如果不用gson也可以用传统的方式进行写入json数据或者利用StringBuffer拼字符串 写成json字符串形式 
  46.      */  
  47. }</pre><br>  
  48. <br>  
  49. <br>  
  50. <br>  
  51. <br>  
  52. <br>  
  53. <p></p>  
  54. <br>  
  55. <pre></pre>  
  56. <pre></pre>  
android客户端和网站数据交互的实现(基于Http协议获取数据方法) android客户端一般不直接访问网站数据库,而是像浏览器一样发送get或者post请求,然后网站返回客户端能理解的数据格式,客户端解析这些数据,显示在界面上,常用的数据格式是xml和json。 可以理解客户端其实是一个你自己定义标记语言的浏览器,一般浏览器能解析的是html+css的数据,而android客户端能解析的是xml和json(或者都不是而是你自己定义的火星格式),服务端为了能满 阅读详情

相关推荐

服务器和安卓app通信源代码

服务器通过socket协议和app连接,app接收到经纬度显示在百度地图上,目前实现了定位和绘制路线

APP为什么用JSON协议与服务端交互:序列化相关知识

Avro支持的数据类型非常丰富,包括C++语言里面的union类型。SOAP具有安全、可扩展、跨语言、跨平台、支持多种传输协议,有广泛的群众基础,基于HTTP的传输协议使得SOAP在穿越防火墙时具有良好安全性,XML的人眼可读特性使得其具有出众的可调试性,互联网带宽的发展逐渐弥补了其空间开销大的缺点。XML的序列化和反序列化的空间和时间开销都比较大,对于对性能要求达到ms级别的服务,不推荐XML。如果序列化协议具有良好的可扩展性,支持自动增加新的业务字段,而不影响老的服务,这将大大提供系统的灵活度。...

m0_72730471的博客 464

android客户端从服务器端获取json数据并解析的实现代码

首先客户端从服务器端获取json数据 1、利用HttpUrlConnection 代码如下:/**      * 从指定的URL中获取数组      * @param urlPath      * @return      * @throws Exception      */     public static String readParse(String urlPath) throws Exception {                  ByteArrayOutputStream outStream = new ByteArrayOutputStream();          

交互方式和JSON

JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。JSON是一种轻量级(Light-Meight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。JSON 的名称中虽然带有JavaScript,但这是指其语法规则是参考JavaScript对象的,而不是指只能用于JavaScript 语言。

m0_65291134的博客 326

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

Python环境搭建和LabVIEW中的调用

本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW中调用Python的方法。

lvxisi的博客 6390

Android客户端和服务器端数据交互的第四种方法

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单、逻辑清晰的交互例子,本篇博客介绍第四种: 一、服务器端: 代码1:添加名为“AndroidServerServlet.java”的文件 package com.ghj.packageofservlet; ...

gaohuanjie的专栏 9713

用 SQL 分析不同用户群组留存率

一、前言 用户增长对企业非常重要,主要包括: 新增、留存、召回 。本文介绍一个实用的分析留存率的方法: Cohort Analysis (群组分析),APP的下载量越高并不是说产品就越好,产品若没有很好的留存,花费大量时间和资源来挖掘新客户也将是竹篮打水一场空。群组分析有利于衡量用户在每个漏斗的用户流失节点、用户流失数据,从而帮助你发现产品的用户的行为模式和用户增长点。从本质上讲,群组分析Cohort Analysis为你提供了一种数据驱动的方法,用群组分析Cohort Analysis方法,可以来帮助提

qq_39984050的博客 3172

android服务器app,Android客户端与服务器端的json数据交互(很详细)

packagecom.gem.hsx.activity;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importcom.gem....

weixin_42377538的博客 495

【VAX 小番茄安装详细步骤】

本文详细介绍了在VS2022环境下安装Visual Assist X(番茄助手)的步骤及常见问题解决方案。主要内容包括:安装前的兼容性设置(需修改为Windows7兼容模式)、安装流程(卸载旧版本、勾选对应VS版本、替换关键dll文件)以及常见问题处理(如安装失败、工具栏图标缺失等)。文章提供了完整的下载链接和操作截图,特别强调了安装失败后的清理方法(注册表、安装目录和残余文件删除)。最后给出了安装成功后的测试运行指引。

qq_23962581的博客 1714

【BlueDroid】蓝牙音乐协议分析之A2DP和AVRCP连接流程(超详细)

AVCTP协议描述了蓝牙设备间Audio/Video的控制信号交换的格式和机制,他是一个总体的协议,具体的控制信息由其指定的协议(AVRCP)实现,AVCTP协议本身只指定控制Command和Response的总体的格式;这个过程中对应了Event中的btavrcp_play_status_changed_callback和btavrcp_play_position_changed_callback;上述为AVCTP-Control建立L2CAP连接的Command,对应H4的Sent (0x00);

风云说通信 7313

android手机端与web服务器之间的Json数据交互

 手机客户端与服务器端的Json 格式数据交互   以手机端的登陆界面为例 客户端与服务器数据交互,主要分为三步,如下图所示(类似于TCP/IP的三次握手) android手机端 首先手机客户端声明一个异步的AsyncHttpClient对象,通过c.post()或c.get()的方式连接到服务器, 我用的是c.post()的方式,这个方法有几个重载的函数 c.post(url,...

u010956754的专栏 1385

AI系统架构原理与代码实战案例讲解

人工智能的概念可以追溯到上世纪50年代,图灵测试的提出标志着人工智能作为一门学科的诞生。早期的研究主要集中在符号推理、专家系统等领域,取得了一些突破,例如机器定理证明、西洋跳棋程序等。上世纪80年代,随着专家系统的兴起,人工智能进入了一个黄金时期。专家系统通过模拟人类专家的知识和经验进行推理和决策,在医疗诊断、故障诊断等领域取得了成功应用。进入90年代,由于计算能力的限制和数据量的不足,人工智能的发展陷入低谷。近年来,随着深度学习技术的突破、大数据的兴起以及计算能力的提升,人工智能迎来了第三次发展浪潮,在图

AI天才研究院 1793

android提交json实例,Android客户端与服务器端的json数据交互(内含大量知识点)...

【实例简介】Android客户端与服务器端的json数据交互(内含大量知识点),包含文件的上传,文件浏览器等。【实例截图】【核心代码】Android客户端与服务器端的json数据交互(内含大量知识点)└── Android客户端与服务器端的json数据交互(内含大量知识点)├── LoginRegister客户端(android)│ ├── AndroidManifest.xml│ ├──...

weixin_31014131的博客 345

【PINN高级教程】范式融合与前沿应用 第5讲:贝叶斯推断与生成式建模的深度融合

正规化流(Normalizing Flow, NF)通过一系列可逆变换把简单分布映射为复杂后验,从而获得更好的表达能力。算子学习保持映射的物理正确性。贝叶斯推断给出了自然的框架,但直接对高维函数空间做采样(如 MCMC)几乎不可行。1️⃣ 在自己的 PDE 上跑一遍完整的 Bayesian PINN 流模型。的学习机制深度融合,以在保持物理一致性的前提下,高效地从后验分布中采样。2️⃣ 将每个 θ 直接映射到 FNO 权重,得到不同解的采样。的后验 p(θ∣x,y)p(θ∣x,y) 进行近似。

u012133341的博客 474

【RT-DETR涨点改进】独家注意力改进篇 | 手把手教你在RT-DETR上使用LSKAttention大核注意力机制(助力目标检测极限涨点)含多种创新改进点

本文提出了一种LSKA大核注意力机制优化RT-DETR模型的方法。LSKA通过将2D深度卷积核分解为级联的1D水平和垂直核,显著降低了计算复杂度和内存占用,尤其在处理大卷积核时优势明显。该模块在图像分类、目标检测等视觉任务中保持与LKA相当的性能,同时展现出更强的鲁棒性。文章详细介绍了LSKA的网络结构、核心代码实现方法,并提供了多种RT-DETR改进方案,包括rtdetr-r18-LSKA、rtdetr-l-LSKA等7种yaml配置文件,通过实验验证了该方法的有效性。

Ai缝合怪、助力小伙伴高效发论文 252

Android客户端与服务器端的json数据交互

Android客户端与服务器端的json数据交互,主要是通过json形式的数据交互,就是json的写入和解析。  先看效果图,我最讨厌讲东西,一个图没有的。 算了,看来我不是写博客的材料,写不下去了,要排版之类的麻烦,大家还是直接去下载源码,里面有大量的注视,应该能看懂。 下载地址:源码下载地址 登录界面:很传统的随便做了一下: 用的是android4.

soulli的专栏 1704

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android开发之JSON数据解析详解(二)

在上一篇我们讲解了Android开发JSON的基本介绍以及JSON的数据结构等, 今天我们来讲解一下JSON的工作原理以及基本用法: JSON解析分为两种情况,一种是在服务器端解析,另一种是在客户端解析 第一种:在服务器段解析:    通常,客户端在请求服务器数据时,服务器可以使用XML文档、JSON数据或HTML的形式将数据发送给客户端。   那么如何在服务器端生成JSON数据呢?首先

知他人之所知,晓他人之不晓。 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android中解析Json数据

一、原理分析 二、代码实现(整套代码的下载地址http://download.youkuaiyun.com/detail/caihongshijie6/6701279) 所需要的JSON的相关的jar包的下载地址http://download.youkuaiyun.com/detail/caihongshijie6/6701285 1、服务器端(主要用于生成JSON格式的字符串)   1)Js

黄俊东的专栏 2148

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android---SpringBoot实现前后端数据交互

Android—SpringBoot实现前后端数据交互 星光不问赶路人,时间不负有心人 这篇是针对android传数据到后台springboot,使用Xutils框架 使用Xutils框架 关于xutils的使用这是老师的博客大家可以看看 文章目录Android---SpringBoot实现前后端数据交互前端后端数据交互方式SpringBoot获取参数的几种常用注解`get请求``post请求`后台实体对象接收key-value接收map接收 前端后端数据交互方式 前端后端数据提交格式 Sprin

乐褀的博客 7727
上一篇: sqlserver有没有类似sys_connect_by_path的函数-MS-SQLServer/基础类
下一篇: Jquery 仿百度搜索引擎自动完成功能
CEJ-盐井
博客等级 码龄17年 10粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值