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)

Android 使用HTTP(get和post)方式登陆服务器的更多相关文章

  1. Android客户端与服务端交互之登陆示例

    Android客户端与服务端交互之登陆示例 今天了解了一下android客户端与服务端是怎样交互的,发现其实跟web有点类似吧,然后网上找了大神的登陆示例,是基于IntentService的 1.后台 ...

  2. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  3. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. Android通过http协议POST传输方式

    Android通过http协议POST传输方式如下: 方式一:HttpPost(import org.apache.http.client.methods.HttpPost) 代码如下: privat ...

  5. Android 连接 SQL Server (jtds方式)——上

    本文将介绍开发Android程序,连接SQL Server,通过第三方包jtds的方式. 如果你有同样的需求,请跟着做一遍,博主将以最详细的方式,进行介绍. 首先说明,Java.Android连接SQ ...

  6. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  7. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  8. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

  9. Android中日志信息的打印方式

    Android中日志信息的打印方式主要有以下7种: 1)System.out(i级别) 2)System.err(w级别) 3)Log.v 4)Log.d 5)Log.i 6)Log.w 7)Log. ...

随机推荐

  1. 基于heartbeat的单播方式实现tomcat高可用

    1.节点规划 在master.backup节点上添加eth0.eth1两网卡,具体添加过程,参考“基于VMware为CentOS 6.5配置两个网卡” 2.IP规划   master backup e ...

  2. React Native Tips

    1. 检查连接的android设备 android devices 2. 启动android studio android 3. 摇动手机选开发模式,填入server的ip和port 4. Parse ...

  3. HDU2085JAVA

    核反应堆 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. ueditor 添加微软雅黑字体 异常“从客户端中检测到有潜在危险的 request.form值”,解决

    使用ueditor往数据库添加文本内容时,如果字体有css样式, <,>," 这些字符会导致报出异常信息:从客户端中检测到有潜在危险的 request.form值 因为这些字符有 ...

  5. sqlmap

    http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注 ...

  6. DataDictionaryTool 一款生成数据库字典工具支持mysql和oracle

    因为常常查看mysql数据结构,频繁操作.很不爽,于是想把数据表制作成数据字典,于是网上搜的一款工具 DataDictionaryTool ,最终制作成功,分享给大家! 1,此工具需要安装jre ,简 ...

  7. Java获取项目路径

    参考博客.自己就不写了.我觉得他写得很详细 http://blog.csdn.net/hpf911/article/details/5852127

  8. js基础知识之_流程控制语句

    javascript 流程控制 流程控制:就是程序代码执行顺序 流程控制:通过规定的语句让程序代码有条件的按照一定的方式执行 顺序结构 按照书写顺序来执行,是程序中最基本的流程结构 选择结构(分支结构 ...

  9. Java23种设计模式之单例模式

    一.单例模式简介 单例模式是Java设计模式中常见的一种模式.主要分为懒汉式单例.饿汉式单例.登记式单例: 单例模式的特点:  1.单例类只能有一个实例:  2.单例类必须自己创建自己的唯一的实例: ...

  10. ios专题 - GCD(1)

    什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像 NSOperationQueue,他们都允 ...