android的前后台通信

前台

这个小demo是使用手机登陆和后台的web站点通信

手机项目中的: activity_main.xml布局xml的配置

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
   <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />
  
   <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        />
   
   <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/pwd"
        tools:context=".MainActivity" />
 
   <EditText
        android:id="@+id/pwd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        />
   
   <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btntext"
        />
</LinearLayout>

界面截图:

 

和后台通信的本质还是通过http协议来发送请求和接受请求的,所以要实现通信的效果,还需要有辅助的类来实现,可以不需要太明白这三个类的具体操作,知道如何使用就可以了

HttpHelper类:

package com.etc.help;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
 
public classHttpHelper {
    DefaultHttpClienthttpClient = new DefaultHttpClient();
    HttpContextlocalContext = new BasicHttpContext();
    private boolean abort;
    private String ret;
    HttpResponseresponse = null;
    HttpPosthttpPost = null;
    public HttpHelper() {
    }
    public void clearCookies() {
        httpClient.getCookieStore().clear();
    }
    public void abort() {
        try {
            if (httpClient != null) {
                System.out.println("Abort.");
                httpPost.abort();
                abort = true;
            }
        }catch(Exception e) {
            System.out.println("HTTPHelp : Abort Exception : " + e);
        }
    }
    public String postPage(Stringurl, String data, boolean returnAddr) {
        ret = null;
        data=  data == null ?  "" : data;
        httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
                CookiePolicy.RFC_2109);
        httpPost = new HttpPost(url);
        response = null;
        StringEntitytmp = null;
        httpPost.setHeader(
                "User-Agent",
                "Mozilla/5.0 (X11; U; Linux "
                        +"i686; en-US; rv:1.8.1.6) Gecko/20061201Firefox/2.0.0.6 (Ubuntu-feisty)");
        httpPost.setHeader(
                "Accept",
                "text/html,application/xml,"
                        +"application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
        httpPost.setHeader("Content-Type","application/x-www-form-urlencoded");
 
        try {
            tmp= newStringEntity(data, "UTF-8");
        }catch(UnsupportedEncodingException e) {
            System.out
                    .println("HTTPHelp : UnsupportedEncodingException : " + e);
        }
        httpPost.setEntity(tmp);
        try {
            response = httpClient.execute(httpPost, localContext);
        }catch(ClientProtocolException e) {
            System.out.println("HTTPHelp : ClientProtocolException : " + e);
        }catch(IOException e) {
            System.out.println("HTTPHelp : IOException : " + e);
        }
        try {
            ret = EntityUtils.toString(response.getEntity());
        }catch(ParseException e) {
            e.printStackTrace();
        }catch(IOException e) {
            e.printStackTrace();
        }
        return ret;
    }
 
}

HttpTask类:

package com.etc.task;
import com.etc.help.HttpHelper;
import android.content.Context;
import android.os.AsyncTask;
public classHttpTask extendsAsyncTask<String, Void, Void> {
    protected String response;
   protectedHttpCallback callback;
    private Context context;
   private boolean interact ;
   privateHttpHelper httpHelper= newHttpHelper();
    public HttpTask(Contextcontext , booleaninteract){
    super();
    this.interact = interact;
    this.context = context;
    if(interact){
        //this.dialog =  newProgressDialog(context);
    }
   }
   
   publicHttpTask(Context context){
    this(context,true);
   }
    @Override
    protected VoiddoInBackground(String... params) {
        if(params.length > 1){
           response = httpHelper.postPage(params[0],params[1], true);
           } else{
           response = httpHelper.postPage(params[0], null, true);
           }
           return null;
    }
    // can use UI thread here
   protected void onPostExecute(Voidunused) {
       if(interact){
       //dialog.dismiss();
       }
       if(callback != null){
       callback.callback(response);
       }
      
   }
    public voidsetCallback(HttpCallback callback) {
        this.callback = callback;
    }
}

HttpCallback接口:

package com.etc.task;
public interface HttpCallback {
    void callback(Stringresponse);
}

主Activity类: MainActivity类

package com.etc.login;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.message.BasicNameValuePair;
import com.etc.task.HttpCallback;
import com.etc.task.HttpTask;
import com.example.login.R;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import entity.User;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
//该类实现了OnClickListener类和HttpCallback(上面引入的接口)接口
public classMainActivity extends Activity implements OnClickListener,HttpCallback {
    EditTextname;  //保存用户名
    EditTextpwd;   //保存密码
    Buttonbtn;
    StringserverUrl="/LoginTest/Login";    //获取请求后台的Servlet
   @Override
   public void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取界面的各个元素
        name=(EditText) findViewById(R.id.name);
        pwd=(EditText) findViewById(R.id.pwd);
        btn=(Button) findViewById(R.id.btn);
        //获取strings.xml中的server的string的值,值为 Http://站点的ip:8080/
        serverUrl=getResources().getString(R.string.server)+serverUrl;
        btn.setOnClickListener(this);
       
   }
   //登陆的单击事件
    @Override
    public void onClick(View v) {
        //参数值对
        List<NameValuePair>params=newArrayList<NameValuePair>();
        Stringnamestr=name.getText().toString();
        Stringpwdstr=pwd.getText().toString();
        params.add(new BasicNameValuePair("userName",namestr));
        params.add(new BasicNameValuePair("userPwd",pwdstr));
         //将List集合转为参数string
        String data=URLEncodedUtils.format(params,"utf-8");
        //HttpTask为上面引入的类
        HttpTasktask=newHttpTask(this);
        //条用回调函数
        task.setCallback(this);
        //执行请求的方法
        task.execute(serverUrl,data);
    }
   //回调函数
    /* (non-Javadoc) response是后台返回的结果
     * @seecom.etc.task.HttpCallback#callback(java.lang.String)
     */ 
    @Override
    public void callback(Stringresponse) {
       
         //接收string
         System.out.println("后台返回的结果:"+response);  
         Gson gson=new Gson();
         //接收对象
//         Useruser=gson.fromJson(response,User.class);
//        System.out.println("name:"+user.getName()+"pwd:"+user.getPwd());
         //接收对象集合
         User[]users=gson.fromJson(response,User[].class);
         for(User u:users)
         {
         System.out.println("name:"+u.getName()+",pwd:"+u.getPwd());
         }
       System.out.println("接收完成");
    }
}

实体类User就两个字段:

public class User
{
    private String name;
    private String pwd;
}

应为项目还使用到了Json 还需要在项目中引入几个jar包

gson-1.6.jar

json-lib-2.0-jdk13.jar

ksoap2-android-assembly-2.3-jar-with-dependencies.jar

要是前台能和后台通信,还需要在android的AndroidManifest.xml中设置用户权限添加

<uses-permission android:name="android.permission.INTERNET"/>

有关上面引入的三个类和上面谈到的三个jar包的百度链接:http://pan.baidu.com/share/link?shareid=161981&uk=909074031

后台

Web项目中的Servlet类  Login类:

package servlet;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import commans.WebUtils;
import entity.User;
public class Login extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponseresponse)
            throws ServletException, IOException
    {
            doPost(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
          String userName=request.getParameter("userName");
          String userPwd=request.getParameter("userPwd");
          String new1=newString(userName.getBytes("8859_1"),"utf-8");
          String new2=newString(userPwd.getBytes("8859_1"),"utf-8");
          System.out.println("用户名:"+new1+",密码:"+new2);
          //以字符串返回
         //WebUtils.writeJson(response,"登入成功!用户名:"+userName+",密码:"+userPwd);
         
          //返回对象
//          JsonObject jsonObject=new JsonObject();
//         jsonObject.addProperty("name",userName);
//          jsonObject.addProperty("pwd",userPwd);
         
         
//          User user=new User();
//          user.setName(userName);
//          user.setPwd(userPwd);
//          GsonBuilder bulid=newGsonBuilder();
//          Gson gson=bulid.create();
//          String result=gson.toJson(user);
//          WebUtils.writeJson(response, result);
         
          //返回list集合
//          JsonArray jsonArray=new JsonArray();
//          for(int i=0;i<3;i++)
//          {
//             JsonObject json=new JsonObject();
//             json.addProperty("name",userName+i);
//             json.addProperty("pwd",userPwd+i);
//             jsonArray.add(json);
//          }
         
        ArrayList<User> list=newArrayList<User>();
        for(int i=0;i<3;i++)
        {
             User u=new User(new1+i,new2+i);
             list.add(u);
        }
        GsonBuilder bulid=new GsonBuilder();
        Gson gson=bulid.create();
        String result=gson.toJson(list);
        WebUtils.writeJson(response,result);
    }
}

WebUtils类只是条用了Httpresponse返回了数据而已:

public class WebUtils
{
    //resonpse返回值
    public static void writeJson(HttpServletResponse response,String result)
    {
    response.setContentType("application/json;charset=utf-8");
    PrintWriterout;
    try
        {
            out=response.getWriter();
            out.write(result);
            out.flush();
            out.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
   
    }
}

因为在项目中也用到了Json所以也需要到上面谈到的几个包


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值