RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:24小时服务
你可能遇到了下面的问题
关闭右侧工具栏
大唐传易http协议和客户端的交互学问

我们主要说的是客户端在服务端上面的操作,主要是在客户端上面的创建。

android客户端端:

①新建一个android application:Hello。

②引入org.json.jar。

③在activity_main.xml布局文件中加入两个EditText,来输入用户名和密码,添加按钮来提交json数据。

④先封装一下访问网络的HTTP操作:
WebUtil.java:

  1. import org.apache.http.HttpResponse;  
  2. import org.apache.http.client.HttpClient;  
  3. import org.apache.http.client.methods.HttpPost;  
  4. import org.apache.http.entity.StringEntity;  
  5. import org.apache.http.impl.client.DefaultHttpClient;  
  6. import org.apache.http.params.BasicHttpParams;  
  7. import org.apache.http.params.HttpParams;  
  8. import org.apache.http.util.EntityUtils;  
  9. import org.json.JSONArray;  
  10.   
  11. import cn.domain.hello.config.Config;  
  12.   
  13. public class WebUtil {  
  14.     public static JSONArray getJSONArrayByWeb(String methodName,  
  15.             JSONArray params) {  
  16.   
  17.         String returnValue = "";  
  18.         JSONArray result = null;  
  19.         HttpParams httpParams = new BasicHttpParams();  
  20.         httpParams.setParameter("charset""UTF-8");  
  21.         HttpClient hc = new DefaultHttpClient(httpParams);  
  22.         HttpPost hp = new HttpPost(Config.SERVER_IP + "/HelloServer/servlet/"  
  23.                 + methodName);  
  24.         try {  
  25.             hp.setEntity(new StringEntity(params.toString(), "UTF-8"));  
  26.             HttpResponse hr = hc.execute(hp);  
  27.             if (hr.getStatusLine().getStatusCode() == 200) {  
  28.                 returnValue = EntityUtils.toString(hr.getEntity(), "UTF-8");  
  29.                 result = new JSONArray(returnValue);  
  30.             }  
  31.         } catch (Exception e) {  
  32.             // TODO Auto-generated catch block  
  33.             e.printStackTrace();  
  34.         }  
  35.         if (hc != null) {  
  36.             hc.getConnectionManager().shutdown();  
  37.         }  
  38.         return result;  
  39.     }  
  40. }  
  41. ⑤在MainActivity中实现登录操作:

     

     

    [java] view plain copy
     
    1. package cn.domain.hello.activity;  
    2.   
    3. import org.json.JSONArray;  
    4. import org.json.JSONException;  
    5. import org.json.JSONObject;  
    6.   
    7. import cn.domain.hello.R;  
    8. import cn.domain.hello.config.Config;  
    9. import cn.domain.hello.util.WebUtil;  
    10. import android.app.Activity;  
    11. import android.os.AsyncTask;  
    12. import android.os.Bundle;  
    13. import android.util.Log;  
    14. import android.view.View;  
    15. import android.view.ViewStub;  
    16. import android.view.View.OnClickListener;  
    17. import android.view.ViewGroup;  
    18. import android.widget.Button;  
    19. import android.widget.EditText;  
    20. import android.widget.TextView;  
    21. import android.widget.Toast;  
    22.   
    23. public class MainActivity extends Activity {  
    24.   
    25.     private EditText etUsername;  
    26.     private EditText etPassword;  
    27.     private Button btnLogin;  
    28.     private ViewGroup vsProgress;  
    29.   
    30.     @Override  
    31.     protected void onCreate(Bundle savedInstanceState) {  
    32.         super.onCreate(savedInstanceState);  
    33.         setContentView(R.layout.activity_main);  
    34.         this.etUsername = (EditText) this.findViewById(R.id.etUsername);  
    35.         this.etPassword = (EditText) this.findViewById(R.id.etPassword);  
    36.         this.btnLogin = (Button) this.findViewById(R.id.btnLogin);  
    37.         this.btnLogin.setOnClickListener(new OnClickListener() {  
    38.   
    39.             @Override  
    40.             public void onClick(View v) {  
    41.                 // TODO Auto-generated method stub  
    42.                 String username = MainActivity.this.etUsername.getText()  
    43.                         .toString().trim();  
    44.                 String password = MainActivity.this.etPassword.getText()  
    45.                         .toString().trim();  
    46.                 if ("".equals(username)) {  
    47.                     Toast.makeText(MainActivity.this"请填写用户名",  
    48.                             Toast.LENGTH_SHORT).show();  
    49.                     return;  
    50.                 }  
    51.                 if ("".equals(password)) {  
    52.                     Toast.makeText(MainActivity.this"请填写密码",  
    53.                             Toast.LENGTH_SHORT).show();  
    54.                     return;  
    55.                 }  
    56.                 //如果已经填写了用户名和密码,执行登录操作  
    57.                 executeLogin(username, password);  
    58.             }  
    59.         });  
    60.   
    61.     }  
    62.   
    63.     private void executeLogin(String username, String password) {  
    64.         new LoginTask().execute(username, password);  
    65.     }  
    66.   
    67.     private void onLoginComplete(Integer userId) {  
    68.         if (userId == null || userId == 0) {//如果没有获取到用户ID,说明登录失败  
    69.             Toast.makeText(MainActivity.this"用户名或密码错误", Toast.LENGTH_SHORT)  
    70.                     .show();  
    71.             if (vsProgress != null) {  
    72.                 vsProgress.setVisibility(View.INVISIBLE);  
    73.             }  
    74.             return;  
    75.         }  
    76.         if (vsProgress != null) {  
    77.             vsProgress.setVisibility(View.INVISIBLE);  
    78.         }  
    79.         //如果成功获取到返回的用户ID,说明登录成功,跳转到HelloActivity  
    80.         Toast.makeText(MainActivity.this"登陆成功", Toast.LENGTH_SHORT).show();  
    81.         HelloActivity.actionStart(MainActivity.this, userId, etUsername  
    82.                 .getText().toString());  
    83.     }  
    84.   
    85.     private class LoginTask extends AsyncTask<String, Void, Integer> {  
    86.   
    87.         @Override  
    88.         protected void onPreExecute() {  
    89.             // TODO Auto-generated method stub  
    90.             super.onPreExecute();  
    91.             //进行登录验证时,显示登录进度条  
    92.             if (vsProgress == null) {  
    93.                 ViewStub vs = (ViewStub) findViewById(R.id.vsProgress);  
    94.                 vsProgress = (ViewGroup) vs.inflate();  
    95.             } else {  
    96.                 vsProgress.setVisibility(View.VISIBLE);  
    97.             }  
    98.         }  
    99.   
    100.         @Override  
    101.         protected Integer doInBackground(String... params) {  
    102.             // TODO Auto-generated method stub  
    103.             Integer result = null;  
    104.             JSONArray reqValue;  
    105.             try {  
    106.                 //将用户名和密码封装到JSONArray中,进行HTTP通信  
    107.                 reqValue = new JSONArray().put(new JSONObject().put("username",  
    108.                         params[0]).put("password", params[1]));  
    109.                 JSONArray rec = WebUtil.getJSONArrayByWeb(Config.METHOD_LOGIN,  
    110.                         reqValue);  
    111.                 if (rec != null) {//如果成功获取用户ID  
    112.                     result = rec.getJSONObject(0).getInt("userId");  
    113.                 }  
    114.             } catch (JSONException e) {  
    115.                 // TODO Auto-generated catch block  
    116.                 e.printStackTrace();  
    117.             }  
    118.             return result;  
    119.         }  
    120.   
    121.         @Override  
    122.         protected void onPostExecute(Integer result) {  
    123.             // TODO Auto-generated method stub  
    124.             super.onPostExecute(result);  
    125.             //回调  
    126.             onLoginComplete(result);  
    127.         }  
    128.   
    129.     }  
    130. }  具体的其它相关类请下载下面的源码查看。记住一定不要忘了在AndroidManifest.xml文件中添加访问网络的权限:

       

      [html] view plain copy
       
      1. <uses-permission android:name="android.permission.INTERNET" />