提交数据到服务器

一、通过POST和GET两种方式分别向服务器提交数据

package com.shz.services;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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;

public class loginService {

    /**
     * 通过GET请求方式向服务器提交数据
     * 
     * @param userName
     * @param password
     * @return
     */
    public static String loginByGet(String userName, String password) {
        try {
            String path = "http://192.168.1.101/MyWebSite/AndroidTest/Home/Login?UserName="
                    + URLEncoder.encode(userName)
                    + "&Password="
                    + URLEncoder.encode(password);
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(5000);
            conn.setRequestProperty("User-Agent",
                    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
            int code = conn.getResponseCode();
            if (code == 200) {
                return readInputStream(conn.getInputStream());
            } else {
                return "请求失败,错误码:" + code;
            }

        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    /**
     * 通过POST请求方式向服务器提交数据
     * 
     * @param userName
     * @param password
     * @return
     */
    public static String loginByPost(String userName, String password) {
        try {
            String path = "http://192.168.1.101/MyWebSite/AndroidTest/Home/Login";
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setReadTimeout(5000);
            conn.setRequestProperty("User-Agent",
                    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
            conn.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");
            String data = "UserName=" + URLEncoder.encode(userName)
                    + "&Password=" + URLEncoder.encode(password); // 需要Post的数据
            conn.setRequestProperty("Content-Length",
                    String.valueOf(data.length()));

            OutputStream os = conn.getOutputStream();
            os.write(data.getBytes());

            int code = conn.getResponseCode();
            if (code == 200) {
                return readInputStream(conn.getInputStream());
            } else {
                return "请求失败,错误码:" + code;
            }

        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    /**
     * 通过HttpClient GET请求方式向服务器提交数据
     * 
     * @param userName
     * @param password
     * @return
     */
    public static String loginByHttpClientGet(String userName, String password) {
        try {
            // 1.打开浏览器
            HttpClient httpClient = new DefaultHttpClient();
            // 2.输入URL地址
            String path = "http://192.168.1.101/MyWebSite/AndroidTest/Home/Login?UserName="
                    + URLEncoder.encode(userName)
                    + "&Password="
                    + URLEncoder.encode(password);
            HttpGet httpGet = new HttpGet(path);
            // 3.敲回车
            HttpResponse response = httpClient.execute(httpGet);
            int code = response.getStatusLine().getStatusCode();
            if (code == 200) {
                InputStream is = response.getEntity().getContent();
                return readInputStream(is);
            } else {
                return "请求失败,错误码:" + code;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "请求异常:" + e.getMessage();
        }
    }

    /**
     * 通过HttpClient Post 请求方式向服务器提交数据
     * 
     * @param userName
     * @param password
     * @return
     */
    public static String loginByHttpClientPost(String userName, String password) {
        try {
            // 1.打开浏览器
            HttpClient httpClient = new DefaultHttpClient();
            // 2.输入URL地址
            String path = "http://192.168.1.101/MyWebSite/AndroidTest/Home/Login";
            HttpPost httpPost = new HttpPost(path);
            // 设置要提交的数据
            List<NameValuePair> data = new ArrayList<NameValuePair>();
            data.add(new BasicNameValuePair("UserName", userName));
            data.add(new BasicNameValuePair("Password", password));
            httpPost.setEntity(new UrlEncodedFormEntity(data, "UTF-8"));

            // 3.敲回车
            HttpResponse response = httpClient.execute(httpPost);
            int code = response.getStatusLine().getStatusCode();
            if (code == 200) {
                InputStream is = response.getEntity().getContent();
                return readInputStream(is);
            } else {
                return "请求失败,错误码:" + code;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "请求异常:" + e.getMessage();
        }
    }

    public static String readInputStream(InputStream is) {
        try {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            int length = 0;
            byte[] buffer = new byte[1024];
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }

            is.close();
            os.close();

            byte[] osByte = os.toByteArray();
            return new String(osByte);
        } catch (Exception e) {
            e.printStackTrace();
            return "读取输入流异常";
        }
    }
}

二、服务器端代码(Asp.Net MVC)

public ActionResult Login()
        {
            string username = Request["UserName"];
            string password = Request["Password"];
            string msg = "";

            if(username.Equals("admin") && password.Equals("123"))
            {
                msg = "(GET)登录成功!";
            }
            else
            {
                msg = "(GET)无效的用户名或密码!";
            }

            return Content(msg);
        }

        [HttpPost]
        public ActionResult Login(FormCollection collection)
        {
            string username = Request["UserName"];
            string password = Request["Password"];
            string msg = "";

            if (username.Equals("admin") && password.Equals("123"))
            {
                msg = "(POST)登录成功!";
            }
            else
            {
                msg = "(POST)无效的用户名或密码!";
            }

            return Content(msg);
        }

三、客户端代码(布局+UI逻辑)

package com.shz.login;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import com.shz.loginServer.R;
import com.shz.services.loginService;

public class MainActivity extends Activity {

    private EditText txtUserName;
    private EditText txtPassword;
    private CheckBox cbRememberPwd;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.txtUserName = (EditText)this.findViewById(R.id.txtUserName);
        this.txtPassword = (EditText)this.findViewById(R.id.txtPassword);
        this.cbRememberPwd = (CheckBox)this.findViewById(R.id.cbRememberPwd);
        
        
    }        
    
    public void loginGet(View view)
    {
        final String userName = this.txtUserName.getText().toString().trim();
        final String password = this.txtPassword.getText().toString().trim();
        
        if(TextUtils.isEmpty(userName) || TextUtils.isEmpty(password))
        {
            Toast.makeText(this, "用户名或密码不能为空", Toast.LENGTH_LONG).show();
            return;
        }
        
        new Thread(){
            public void run() {
                final String result = loginService.loginByGet(userName, password);
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
                    }
                });
            };
        }.start();
    }    
    
    public void loginPost(View view)
    {
        final String userName = this.txtUserName.getText().toString().trim();
        final String password = this.txtPassword.getText().toString().trim();
        
        if(TextUtils.isEmpty(userName) || TextUtils.isEmpty(password))
        {
            Toast.makeText(this, "用户名或密码不能为空", Toast.LENGTH_LONG).show();
            return;
        }
        
        new Thread(){
            public void run() {
                final String result = loginService.loginByPost(userName, password);
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
                    }
                });
            };
        }.start();
    }  

}
View Code
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.shz.login.MainActivity"
    tools:ignore="MergeRootFrame" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/please_input_username" />

    <EditText
        android:id="@+id/txtUserName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="none" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/please_input_password" />

    <EditText
        android:id="@+id/txtPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <CheckBox
            android:id="@+id/cbRememberPwd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:checked="true"
            android:text="@string/remember_password" />

        <Button
            android:id="@+id/btnLoginGet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/cbRememberPwd"
            android:layout_alignParentLeft="true"
            android:onClick="loginGet"
            android:text="@string/btn_loginGet" />
        
        <Button
            android:id="@+id/btnLoginPost"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/cbRememberPwd"
            android:layout_alignParentRight="true"
            android:onClick="loginPost"
            android:text="@string/btn_loginPost" />
    </RelativeLayout>

</LinearLayout>
View Code

四、效果图

posted @ 2014-08-18 22:59  萌浩  阅读(456)  评论(0编辑  收藏  举报