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

新手也能玩转!用Panosim+MATLAB/Simulink搭建你的第一个智能驾驶仿真场景(保姆级图文)

本文为新手提供了使用Panosim和MATLAB/Simulink搭建智能驾驶仿真场景的详细教程。从环境准备、基础场景创建到仿真模型构建,一步步指导用户完成第一个智能驾驶仿真项目,帮助零基础用户快速上手并体验智能驾驶仿真的乐趣。

weixin_29090089的博客 183

从零开始:如何用Python手绘波特图并分析电路稳定性

本文详细介绍了如何使用Python绘制波特图并分析电路稳定性,涵盖从基础理论到实际应用的完整流程。通过NumPy和Matplotlib实现频域分析,包括RC低通滤波器和RLC带通滤波器的案例,以及相位裕度计算等高级技巧,为电子工程师提供了一套高效的电路分析解决方案。

hhh00的博客 371

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

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

gaohuanjie的专栏 9716

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 250

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

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 526

SurfaceControlViewHost使用介绍

可以看到,主要用途:是把一个进程的View显示到另外一个进程里面。

chadm.xiang 1287

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

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

u010956754的专栏 1385

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)

本文详细介绍了如何使用VSCode搭配Keil进行STM32开发,从环境配置到代码跳转的全流程指南。通过安装必备插件和正确配置项目文件,开发者可以在VSCode中享受现代编辑器的便捷功能,同时保留Keil的编译调试能力,提升嵌入式开发效率。

weixin_28832121的博客 253

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

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

weixin_31014131的博客 345

YOLOv26与其他目标检测算法的对比分析

本文对YOLOv26与其他主流目标检测算法进行了全面对比分析。YOLOv26在COCO数据集上达到96.0% mAP@0.5和79.0% mAP@0.5:0.95,显著优于其他YOLO系列算法,同时保持85FPS的推理速度和35MB的轻量级模型。相比两阶段算法(如Faster R-CNN),YOLOv26在速度、模型大小和内存占用方面优势明显;相比Anchor-free算法(如CenterNet),YOLOv26在速度和模型压缩方面更优。其核心创新包括动态锚框分配、自注意力机制和轻量级设计,使其成为适用于复

一键难忘的博客 994

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

weixin_45735391的博客 6万+

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

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

soulli的专栏 1704

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android中解析Json数据

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

黄俊东的专栏 2149

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

乐褀的博客 7727
上一篇: android JSON解析之JSONObject与GSON
下一篇: Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结
混魔MJM
博客等级 码龄9年 57粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值