栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android客户端与服务端交互

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android客户端与服务端交互

本文和大家一起了解了一下android客户端与服务端是怎样交互的,具体内容如下

1.后台使用简单的servlet,支持GET或POST。这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功。

servlet使用之前需要配置,主义servlet的servlet-name要和servlet-mapping的servlet-name一致,否则找不到路径

我是在myEclipse上创建的一个web service 项目,然后部署到tomcat服务器上以便android客户端访问



    helloWorld

    com.zhongzhong.wap.action.HelloServlet

  

  

    helloWorld

    /queryOrder

  

 
 

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import com.zhongzhong.wap.bean.UserBean;

 

public class HelloServlet extends HttpServlet {

 

  @Override

  protected void doGet(HttpServletRequest req, HttpServletResponse resp)

      throws ServletException, IOException {

    doPost(req, resp);

  }

 

  @Override

  protected void doPost(HttpServletRequest req, HttpServletResponse resp)

      throws ServletException, IOException {

     

     resp.setContentType(text/html); 

      PrintWriter out = resp.getWriter(); 

      Boolean flag = false;  

      String userName = req.getParameter(un); 

      String password = req.getParameter(pw); 

      if(userName.equals(htp)&&password.equals(123))

      {

 flag = true;

      }



      else flag = false;

      System.out.println(userName:+userName+ password:+password);

      out.print(flag); 

      out.flush(); 

      out.close();

  }

 

}



2.然后我是在安卓的ADT上创建一个安卓项目,建立两个Activity,分别作为登录界面和登录成功界面。



 

  

 

  

 

    

  

 

  

 
 

 



 

  

 



 3.HTTP的访问公共类,用于处理GET和POST请求。

 package com.example.logindemo;

 

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

 

import org.apache.http.HttpResponse;

import org.apache.http.NamevaluePair;

import org.apache.http.client.HttpClient;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNamevaluePair;

import org.apache.http.util.EntityUtils;

 

import android.content.Entity;

import android.util.Log;

 

public class HttpUtil {

  // 创建HttpClient对象

  public static HttpClient httpClient = new DefaultHttpClient();

  public static final String base_URL = http://192.168.3.14:8090/HelloWord/;

 

  

  public static String getRequest(String url) throws Exception {

    // 创建HttpGet对象。

    HttpGet get = new HttpGet(url);

    // 发送GET请求

    HttpResponse httpResponse = httpClient.execute(get);

    // 如果服务器成功地返回响应

    if (httpResponse.getStatusLine().getStatusCode() == 200) {

      // 获取服务器响应字符串

      String result = EntityUtils.toString(httpResponse.getEntity());

      return result;

    } else {

      Log.d(服务器响应代码, (new Integer(httpResponse.getStatusLine()

   .getStatusCode())).toString());

      return null;

    }

  }

 

  

  public static String postRequest(String url, Map rawParams)

      throws Exception {

    // 创建HttpPost对象。

    HttpPost post = new HttpPost(url);

    // 如果传递参数个数比较多的话可以对传递的参数进行封装

    List params = new ArrayList();

    for (String key : rawParams.keySet()) {

      // 封装请求参数

      params.add(new BasicNamevaluePair(key, rawParams.get(key)));

    }

    // 设置请求参数

    post.setEntity(new UrlEncodedFormEntity(params, UTF-8));

    // 发送POST请求

    HttpResponse httpResponse = httpClient.execute(post);

    // 如果服务器成功地返回响应

    if (httpResponse.getStatusLine().getStatusCode() == 200) {

      // 获取服务器响应字符串

      String result = EntityUtils.toString(httpResponse.getEntity());

      return result;

    }

    return null;

  }

}





4.IntentService服务,用于在后台以队列方式处理耗时操作。

package com.example.logindemo;

 

import java.util.HashMap;

 

import android.app.IntentService;

import android.content.Intent;

import android.util.Log;

 

public class ConnectService extends IntentService {

  private static final String ACTION_RECV_MSG = com.example.logindemo.action.RECEIVE_MESSAGE;

 

  public ConnectService() {

    super(TestIntentService);

    // TODO Auto-generated constructor stub

  }

   

  @Override

  protected void onHandleIntent(Intent intent) {

    // TODO Auto-generated method stub

     

    Boolean flag = false; 

    //通过intent获取主线程传来的用户名和密码字符串 

    String username = intent.getStringExtra(username); 

    String password = intent.getStringExtra(password); 

    flag = doLogin(username, password); 

    Log.d(登录结果, flag.toString()); 

      

    Intent broadcastIntent = new Intent(); 

    broadcastIntent.setAction(ACTION_RECV_MSG);  

    broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);  

    broadcastIntent.putExtra(result, flag.toString()); 

    sendBroadcast(broadcastIntent); 

 

  }

   

   // 定义发送请求的方法 

  private Boolean doLogin(String username, String password) 

  { 

    String strFlag = ; 

    // 使用Map封装请求参数 

    HashMap map = new HashMap(); 

    map.put(un, username); 

    map.put(pw, password); 

    // 定义发送请求的URL 

   String url = HttpUtil.base_URL + queryOrder?un= + username + &pw= + password; //GET方式 

    // String url = HttpUtil.base_URL + LoginServlet; //POST方式 

    Log.d(url, url); 

    Log.d(username, username); 

    Log.d(password, password); 

    try { 

      // 发送请求 

      strFlag = HttpUtil.postRequest(url, map); //POST方式 

//     strFlag = HttpUtil.getRequest(url); //GET方式 

      Log.d(服务器返回值, strFlag); 

    } catch (Exception e) { 

      // TODO Auto-generated catch block 

      e.printStackTrace(); 

    } 

      

    if(strFlag.trim().equals(true)){ 

      return true; 

    }else{ 

      return false; 

    } 

      

  } 

}



5.在AndroidManifest.xml中注册IntentService。注意uses-permission节点,为程序开启访问网络的权限。 





 

  

 

  

 

   

     

      

  

 

 

      

    

     

    

 

    

    

  

 



6.登陆界面处理,注意

按钮监听事件中,使用Intent将要传递的值传给service。接收广播类中,同样使用Intent将要传递的值传给下一个Activity。在onCreate()中,动态注册接收广播类的实例receiver。在接收广播类中,不要使用完毕后忘记注销接收器,否则会报一个Are you missing a call to unregisterReceiver()? 的异常。 

package com.example.logindemo;

 

import android.os.Bundle;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

 

public class MainActivity extends Activity {

   private static final String ACTION_RECV_MSG = com.example.logindemo.action.RECEIVE_MESSAGE;

  private Button loginBtn;

  private EditText et_username;

  private EditText et_password;

  private String userName;

  private String passWord;

  private MessageReceiver receiver ;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    initView();

    //动态注册receiver  

    IntentFilter filter = new IntentFilter(ACTION_RECV_MSG);  

    filter.addCategory(Intent.CATEGORY_DEFAULT);  

    receiver = new MessageReceiver();  

    registerReceiver(receiver, filter);

  }

   

  private void initView() {

    // TODO Auto-generated method stub

    et_username = (EditText)findViewById(R.id.et_user);

    et_password =( EditText)findViewById(R.id.et_psw);

    loginBtn = (Button)findViewById(R.id.btn_login);

    loginBtn.setonClickListener(new onClickListener() {



      @Override

      public void onClick(View v) {

 // TODO Auto-generated method stub

 if(matchLoginMsg())

 {

   // 如果校验成功 

   Intent msgIntent = new Intent(MainActivity.this, ConnectService.class); 

   msgIntent.putExtra(username, et_username.getText().toString().trim()); 

   msgIntent.putExtra(password, et_password.getText().toString().trim()); 

   startService(msgIntent);

 }

  

      }

    });

  }

   

  protected boolean matchLoginMsg() {

    // TODO Auto-generated method stub

    userName = et_username.getText().toString().trim();

    passWord = et_password.getText().toString().trim();

    if(userName.equals())

    {

      Toast.makeText(MainActivity.this, 账号不能为空,Toast.LENGTH_SHORT).show();

      return false;

    }

    if(passWord.equals())

    {

      Toast.makeText(MainActivity.this, 密码不能为空,Toast.LENGTH_SHORT).show();

      return false;

    }

    return true;

  }

  //接收广播类  

  public class MessageReceiver extends BroadcastReceiver {  

    @Override  

    public void onReceive(Context context, Intent intent) {  

      String message = intent.getStringExtra(result);  

      Log.i(MessageReceiver, message); 

    // 如果登录成功 

      if (message.equals(true)){ 

 // 启动Main Activity 

 Intent nextIntent = new Intent(MainActivity.this, NaviActivity.class); 

 startActivity(nextIntent); 

 // 结束该Activity 

 finish(); 

 //注销广播接收器 

 context.unregisterReceiver(this); 

      }else{ 

 Toast.makeText(MainActivity.this, 用户名或密码错误,请重新输入!,Toast.LENGTH_SHORT).show();

      } 

 

    }  

  }  

  @Override

  public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.main, menu);

    return true;

  }

 

}

以上就是本文的全部内容,希望对大家的学习有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/163335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号