Android开发使用POST方式向服务器请求和发送数据

前面说了GET方式。现在尝试一下POST

#1.首先先用新建个servlet处理登陆请求

package com.wzw.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String username=request.getParameter("username");
		String password=request.getParameter("password");
		if(username.equals("admin")&&password.equals("123456")){
			response.getWriter().println("success");
		}else{
			response.getWriter().println("failed");
		}

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
<span style="white-space:pre">		</span>this.doGet(request,response);
	}

}

#2.布局文件也很简单

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:layout_marginTop="10dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_username"
        android:hint="请输入名字"/>
    <EditText
        android:layout_marginTop="10dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_password"
        android:hint="请输入密码"/>

    <Button android:layout_height="wrap_content"
	    android:layout_width="wrap_content"
	    android:onClick="doGet"
	    android:text="GET方式提交"/>

	<Button android:layout_height="wrap_content"
	    android:layout_width="wrap_content"
	      android:onClick="doPost"
	    android:text="POST方式提交"/>
</LinearLayout>

#3在mainactivity中实现方法

package com.wzw.submitdata;

import com.wzw.submitdata.utils.NetUtil;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

	private EditText etUsername;
	private EditText etPassword;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		etUsername = (EditText) findViewById(R.id.et_username);
		etPassword = (EditText) findViewById(R.id.et_password);

	}
	public void doGet(View v){
		final String username=etUsername.getText().toString();
		final String password=etPassword.getText().toString();
		new Thread(new Runnable() {

			@Override
			public void run() {
				//访问网络要在子线程中实现,使用get取数据
				final String state=NetUtil.loginOfGet(username, password);

				//执行在主线程上
				runOnUiThread(new Runnable() {
					public void run() {
						//就是在主线程上操作,弹出结果
						Toast.makeText(MainActivity.this, state, 0).show();

					}
				});
			}
		}).start();

	}

	public void doPost(View v){
		final String username=etUsername.getText().toString();
		final String password=etPassword.getText().toString();
		new Thread(new Runnable() {

			@Override
			public void run() {
				final String state=NetUtil.LoginOfPost(username, password);
				//执行在主线程上
				runOnUiThread(new Runnable() {
					public void run() {
						//就是在主线程上操作,弹出结果
						Toast.makeText(MainActivity.this, state, 0).show();

					}
				});

			}

		}).start();

	}

}

#4.具体处理GET和POST的方法

package com.wzw.submitdata.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class NetUtil {

	/**
	 * 使用GET访问去访问网络
	 * @param username
	 * @param password
	 * @return 服务器返回的结果
	 */
	public static String loginOfGet(String username,String password){
		HttpURLConnection conn=null;
		try {
			String data="username="+username+"&password="+password;
			URL url=new URL("http://192.168.1.4:8080/AndroidServer/LoginServlet?"+data);
			conn=(HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			conn.setConnectTimeout(10000);
			conn.setReadTimeout(5000);
			conn.connect();
			int code=conn.getResponseCode();
			if(code==200){
				InputStream is=conn.getInputStream();
				String state=getStringFromInputStream(is);
				return state;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(conn!=null){
				conn.disconnect();
			}
		}

		return null;
	}

	/**
	 * 使用POST访问去访问网络
	 * @param username
	 * @param password
	 * @return
	 */
	public static String LoginOfPost(String username,String password){
		HttpURLConnection conn=null;
		try {
			URL url=new URL("http://192.168.1.4:8080/AndroidServer/LoginServlet");
			conn=(HttpURLConnection) url.openConnection();
			conn.setRequestMethod("POST");
			conn.setConnectTimeout(10000);
			conn.setReadTimeout(5000);
			conn.setDoOutput(true);
			//post请求的参数
			String data="username="+username+"&password="+password;
			OutputStream out=conn.getOutputStream();
			out.write(data.getBytes());
			out.flush();
			out.close();

			conn.connect();
			int code=conn.getResponseCode();
			if(code==200){
				InputStream is=conn.getInputStream();
				String state=getStringFromInputStream(is);
				return state;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(conn!=null){
				conn.disconnect();
			}
		}

		return null;
	}

	/**
	 * 根据输入流返回一个字符串
	 * @param is
	 * @return
	 * @throws Exception
	 */
	private static String getStringFromInputStream(InputStream is) throws Exception{

		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		byte[] buff=new byte[1024];
		int len=-1;
		while((len=is.read(buff))!=-1){
			baos.write(buff, 0, len);
		}
		is.close();
		String html=baos.toString();
		baos.close();

		return html;
	}
}

Android开发使用POST方式向服务器请求和发送数据

时间: 2024-10-14 20:37:10

Android开发使用POST方式向服务器请求和发送数据的相关文章

Android开发使用GET方式向服务器请求和发送数据

#1.首先先用新建个servlet处理登陆请求 代码如下.只实现了doGet方法 package com.wzw.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSe

android 客户端访问自己建立的服务器并返回JSON数据进行解析学习

最近在找关于客户端访问服务器开发的用例 总是去访问别人的网站也不能对里面的数据进行修改也不知道是怎么实现的,自己在网上申请了一个免费的服务器网站上传了一个php文件,现在就可以通过urlStr===http://1.hellowes.sinaapp.com/访问服务器上的信息了,并且服务器会返回一个数据,由于对php一点不懂所以服务器上返回的并不是真正的JSON数据,所以只好通过客户端字符串组合成一个JSON语句通过JSONObject进行解析出来, 下面贴出实现代码,总算是可以从服务器上获取信

服务器向客户端发送数据自动中断

问题现象: 客户端接收服务器端数据出现假死现象. 环境描述: 1.      客户端是window程序 2.      服务器端是Linux程序 3.      服务器端程序和客户端程序采用TCP进行通讯 问题分析: 1.      首先,客户端上进行抓包,对其数据包进行分析,发现服务器端发送的数据总是不完全 2.      其次,服务器上进行抓包,发现发送一会儿后,发送端的TCP窗口满了,导致数据溢出,发送的数据都是错误的数据包 3.      从服务器上的数据包分析发现,由于客户端处理速度过

iOS开发 服务器请求出来的数据按日期重新分组

在APP开发中经常碰到这种情况,后台给的数据需要我们按照某种条件分组.比如我的项目中:需要把数组中的数据按照时间分类分组,同一天的数据放在一起比如8-20号的数据分一组,8-21号的数据分一组.代码如下: #import "ViewController.h" #import "model.h" @interface ViewController ()<UITableViewDelegate,UITableViewDataSource> { NSMutab

android开发 ,对接支付宝,服务器(PHP)校验失败

已备忘记,资料链接: http://my.oschina.net/u/256646/blog/174222 注意: 里面有一个设计到支付宝公钥的地方: 注 意这个是2048位的公钥应该是9行或者10行,不能为1行,不然PHP的openssl_pkey_get_public无法读 取,pub_key_id的结果为false,我就在这个上吃了大亏.如果没有—–BEGIN PUBLIC KEY—– 和 —–END PUBLIC KEY—– 可以自己加上,最后保存到一个rsa_public_key.pe

[ECSHOP二次开发]解决分类商品Ajax连续请求导致的数据重复

0x00: 首先声明一个全局变量. var control = true; 然后,在滑动处罚ajax请求的代码处,做一个判断. if (control) { $('.get_more').click(); }; 这个地方是获取数据的函数以及ajax请求的函数 get_data: function() { var ile; control=false;    //首先进来这个函数之后吧全局变量设置成false以防重复请求 lock = true; target.children(".more_lo

android开发-网络请求Ⅰ

本章讲述在android开发中,常用的网络请求操作.网络请求利用android基本的HttpURLConnection连接URL和开源网络请求包AsyncHttpClient.本次网络请求以调取天气接口查询天气为案例,对请求到的天气数据采用SQLite数据库存储,并利用ContentProvider数据共享模式操作存储数据.本章主要介绍知识点HttpURLConnection,AsyncHttpClient,ContentProvider,Json解析插件GsonFormat及Json解析类Gs

android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏

标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android(11) 转自:http://blog.csdn.net/bromon/article/details/253330 Bromon原创 请尊重版权 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码.关于这个项目,有很多地方值得聊一聊.本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的,我打算只说说一些值得注意

搭建Android开发环境附图详解+模拟器安装(JDK+Eclipse+SDK+ADT)

——搭建android开发环境的方式有多种,比如:JDK+Eclipse+SDK+ADT或者JDK+Eclipse+捆绑好的AndroidSDK或者Android Studio. Google 决定将重点建设 Android Studio编译工具.Google 在去年年底终止支持其 Eclipse包括插件ADT.(Android Studio会是一个趋势). 这篇将仅作为一个笔记吧,因为之前一直使用Word,记事本记录一些笔记之类.(大神勿喷,如有错误不当的地方,还望指出.谢谢!) 搭建开发环境