package com.wuyou.submittoserver;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;public class MainActivity extends ActionBarActivity {    private static final int OK = 200;    private EditText usernameEditText;    private EditText passwrodEditText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        usernameEditText = (EditText) findViewById(R.id.username);        passwrodEditText = (EditText) findViewById(R.id.password);    }    /**     * post方法多了三个东西:     * ①请求的表单类型     * ②请求的数据长度     * ③请求的数据并且写给服务器     */    public void post(View view) {        final String username = usernameEditText.getText().toString().trim();        final String password = passwrodEditText.getText().toString().trim();        //Android默认模拟器外部的地址为10.0.2.2,而不是localhost和127.0.0.1        final String serverPath = "http://10.0.2.2:8080/LoginServlet";        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {            //给出提示:账号密码不许为空        } else {            new Thread(new Runnable() {                @Override                public void run() {                    try {                        //向服务器请求的数据                        String data = "username=" + URLEncoder.encode(username,"UTF-8") + "&password=" + URLEncoder.encode(password,"UTF-8");                        URL url = new URL(serverPath);                        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();                        httpURLConnection.setRequestMethod("POST");                        httpURLConnection.setConnectTimeout(3000);                        httpURLConnection.setDoOutput(true);//打开输出流,以便向服务器提交数据                        //设置请求体的类型是文本类型                        httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");                        //设置请求体的长度                        httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length()));                        //获得输出流,向服务器写入数据                        OutputStream outputStream = httpURLConnection.getOutputStream();                        outputStream.write(data.getBytes());                        int responseCode = httpURLConnection.getResponseCode();                        if (200 == responseCode) {                            InputStream inputStream = httpURLConnection.getInputStream();                            final String responseMsg = StreamTool.getString(inputStream);                            runOnUiThread(new Runnable() {                                @Override                                public void run() {                                    Toast.makeText(MainActivity.this, responseMsg, Toast.LENGTH_LONG).show();                                }                            });                        } else {                            System.out.println("responseCode = " + responseCode);                            //连接服务器出错,错误代码为:responseCode 根据代码值告诉用户出错的原因                            //....                        }                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }).start();        }    }    public void get(View view) {        final String username = usernameEditText.getText().toString().trim();        final String password = passwrodEditText.getText().toString().trim();        //Android默认模拟器外部的地址为10.0.2.2,而不是localhost和127.0.0.1        final String serverPath = "http://10.0.2.2:8080/LoginServlet";        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {            //给出提示:账号密码不许为空        } else {            new Thread(new Runnable() {                @Override                public void run() {                    try {                        //使用GET方式请求服务器只能这样                        URL url = new URL(serverPath + "?username=" + URLEncoder.encode(username,"UTF-8") + "&password=" + URLEncoder.encode(password,"UTF-8"));                        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();                        httpURLConnection.setRequestMethod("GET");                        httpURLConnection.setConnectTimeout(5000);                        httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0");                        int responseCode = httpURLConnection.getResponseCode();                        if (200 == responseCode) {                            InputStream inputStream = httpURLConnection.getInputStream();                            final String responseMsg = StreamTool.getString(inputStream);                            runOnUiThread(new Runnable() {                                @Override                                public void run() {                                    Toast.makeText(MainActivity.this, responseMsg, Toast.LENGTH_LONG).show();                                }                            });                        } else {                            System.out.println("responseCode = " + responseCode);                            //连接服务器出错,错误代码为:responseCode 根据代码值告诉用户出错的原因                            //....                        }                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }).start();        }    }}class StreamTool {    public static String getString(InputStream inputStream) throws IOException {        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();        byte[] buf = new byte[1024];        int length;        while((length = inputStream.read(buf)) >0) {            byteArrayOutputStream.write(buf, 0 ,length);        }        byte[] stringBytes = byteArrayOutputStream.toByteArray();        String str = new String(stringBytes);        return str;    }}

界面就不写了。

要注意几个地方:

①模拟器访问本机服务器127.0.01(locahost)的话,使用的地址是:10.0.2.2

②post比get方法多了三个要发送的数据头(header)

更多相关文章

  1. 模仿Android(安卓)location provider
  2. Android(安卓)定时到服务器取数据并刷新
  3. Android使用SAX解析XML(3)
  4. Android客户端上传文件到服务器端
  5. Android之零碎记忆点
  6. Android(安卓)读取Resources和Assets
  7. android 滑动加载数据
  8. Android(安卓)Http请求失败解决方法
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. android:gravity和android:layout_gravit
  2. [Android菜鸟笔记]xml实现编辑框/按钮的
  3. Android(安卓)Service
  4. 【Android】Uri、UriMatcher、ContentUri
  5. Android之——模拟实现检测心率变化的应
  6. Android(安卓)属性系统 Property service
  7. Android(安卓)广播接收器注册与注销源码
  8. [原]Android应用程序消息处理机制(Looper
  9. Android(安卓)图像绘制之 Drawable(二)
  10. android wifi 连接笔记