博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多种get_post提交数据到网络
阅读量:2394 次
发布时间:2019-05-10

本文共 12035 字,大约阅读时间需要 40 分钟。

传统提交方式

HttpClient提交方式

com.loopj.android.http组件提交方式

需要放落网络的权限

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

package com.itheim28.submitdata;import android.app.Activity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.itheim28.submitdata.utils.NetUtils;import com.itheim28.submitdata.utils.NetUtils2;public class MainActivity extends Activity {	private static final String TAG = "MainActivity";	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);	}		/**	 * 使用httpClient方式提交get请求	 * @param v	 */	public void doHttpClientOfGet(View v) {		Log.i(TAG, "doHttpClientOfGet");		final String userName = etUserName.getText().toString();		final String password = etPassword.getText().toString();				new Thread(new Runnable() {			@Override			public void run() {				// 请求网络				final String state = NetUtils2.loginOfGet(userName, password);				// 执行任务在主线程中				runOnUiThread(new Runnable() {					@Override					public void run() {						// 就是在主线程中操作						Toast.makeText(MainActivity.this, state, 0).show();					}				});			}}).start();	}		/**	 * 使用httpClient方式提交post请求	 * @param v	 */	public void doHttpClientOfPost(View v) {		Log.i(TAG, "doHttpClientOfPost");		final String userName = etUserName.getText().toString();		final String password = etPassword.getText().toString();				new Thread(new Runnable() {			@Override			public void run() {				final String state = NetUtils2.loginOfPost(userName, password);				// 执行任务在主线程中				runOnUiThread(new Runnable() {					@Override					public void run() {						// 就是在主线程中操作						Toast.makeText(MainActivity.this, state, 0).show();					}				});			}		}).start();	}	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 = NetUtils.loginOfGet(userName, password);												// 执行任务在主线程中						runOnUiThread(new Runnable() {							@Override							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 = NetUtils.loginOfPost(userName, password);				// 执行任务在主线程中				runOnUiThread(new Runnable() {					@Override					public void run() {						// 就是在主线程中操作						Toast.makeText(MainActivity.this, state, 0).show();					}				});			}		}).start();	}}

传统提交方式

package com.itheim28.submitdata.utils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import android.util.Log;public class NetUtils {	private static final String TAG = "NetUtils";		/**	 * 使用post的方式登录	 * @param userName	 * @param password	 * @return	 */	public static String loginOfPost(String userName, String password) {		HttpURLConnection conn = null;		try {			URL url = new URL("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet");						conn = (HttpURLConnection) url.openConnection();						conn.setRequestMethod("POST");			conn.setConnectTimeout(10000); // 连接的超时时间			conn.setReadTimeout(5000); // 读数据的超时时间			conn.setDoOutput(true);	// 必须设置此方法, 允许输出//			conn.setRequestProperty("Content-Length", 234);		// 设置请求头消息, 可以设置多个						// post请求的参数			String data = "username=" + userName + "&password=" + password;						// 获得一个输出流, 用于向服务器写数据, 默认情况下, 系统不允许向服务器输出内容			OutputStream out = conn.getOutputStream();				out.write(data.getBytes());			out.flush();			out.close();						int responseCode = conn.getResponseCode();			if(responseCode == 200) {				InputStream is = conn.getInputStream();				String state = getStringFromInputStream(is);				return state;			} else {				Log.i(TAG, "访问失败: " + responseCode);			}		} catch (Exception e) {			e.printStackTrace();		} finally {			if(conn != null) {				conn.disconnect();			}		}		return null;	}	/**	 * 使用get的方式登录	 * @param userName	 * @param password	 * @return 登录的状态	 */	public static String loginOfGet(String userName, String password) {		HttpURLConnection conn = null;		try {			String data = "username=" + URLEncoder.encode(userName) + "&password=" + URLEncoder.encode(password);			URL url = new URL("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet?" + data);			conn = (HttpURLConnection) url.openConnection();						conn.setRequestMethod("GET");		// get或者post必须得全大写			conn.setConnectTimeout(10000); // 连接的超时时间			conn.setReadTimeout(5000); // 读数据的超时时间						int responseCode = conn.getResponseCode();			if(responseCode == 200) {				InputStream is = conn.getInputStream();				String state = getStringFromInputStream(is);				return state;			} else {				Log.i(TAG, "访问失败: " + responseCode);			}		} catch (Exception e) {			e.printStackTrace();		} finally {			if(conn != null) {				conn.disconnect();		// 关闭连接			}		}		return null;	}		/**	 * 根据流返回一个字符串信息	 * @param is	 * @return	 * @throws IOException 	 */	private static String getStringFromInputStream(InputStream is) throws IOException {		ByteArrayOutputStream baos = new ByteArrayOutputStream();		byte[] buffer = new byte[1024];		int len = -1;				while((len = is.read(buffer)) != -1) {			baos.write(buffer, 0, len);		}		is.close();				String html = baos.toString();	// 把流中的数据转换成字符串, 采用的编码是: utf-8		//		String html = new String(baos.toByteArray(), "GBK");				baos.close();		return html;	}}

HttpClient提交方式

package com.itheim28.submitdata.utils;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;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;import android.util.Log;public class NetUtils2 {	private static final String TAG = "NetUtils";		/**	 * 使用post的方式登录	 * @param userName	 * @param password	 * @return	 */	public static String loginOfPost(String userName, String password) {		HttpClient client = null;		try {			// 定义一个客户端			client = new DefaultHttpClient();						// 定义post方法			HttpPost post = new HttpPost("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet");						// 定义post请求的参数			List
parameters = new ArrayList
(); parameters.add(new BasicNameValuePair("username", userName)); parameters.add(new BasicNameValuePair("password", password)); // 把post请求的参数包装了一层. // 不写编码名称服务器收数据时乱码. 需要指定字符集为utf-8 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8"); // 设置参数. post.setEntity(entity); // 设置请求头消息// post.addHeader("Content-Length", "20"); // 使用客户端执行post方法 HttpResponse response = client.execute(post); // 开始执行post请求, 会返回给我们一个HttpResponse对象 // 使用响应对象, 获得状态码, 处理内容 int statusCode = response.getStatusLine().getStatusCode(); // 获得状态码 if(statusCode == 200) { // 使用响应对象获得实体, 获得输入流 InputStream is = response.getEntity().getContent(); String text = getStringFromInputStream(is); return text; } else { Log.i(TAG, "请求失败: " + statusCode); } } catch (Exception e) { e.printStackTrace(); } finally { if(client != null) { client.getConnectionManager().shutdown(); // 关闭连接和释放资源 } } return null; } /** * 使用get的方式登录 * @param userName * @param password * @return 登录的状态 */ public static String loginOfGet(String userName, String password) { HttpClient client = null; try { // 定义一个客户端 client = new DefaultHttpClient(); // 定义一个get请求方法 String data = "username=" + userName + "&password=" + password; HttpGet get = new HttpGet("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet?" + data); // response 服务器相应对象, 其中包含了状态信息和服务器返回的数据 HttpResponse response = client.execute(get); // 开始执行get方法, 请求网络 // 获得响应码 int statusCode = response.getStatusLine().getStatusCode(); if(statusCode == 200) { InputStream is = response.getEntity().getContent(); //Entity是返回的实体,里面包含各种信息 String text = getStringFromInputStream(is); return text; } else { Log.i(TAG, "请求失败: " + statusCode); } } catch (Exception e) { e.printStackTrace(); } finally { if(client != null) { client.getConnectionManager().shutdown(); // 关闭连接, 和释放资源 } } return null; } /** * 根据流返回一个字符串信息 * @param is * @return * @throws IOException */ private static String getStringFromInputStream(InputStream is) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } is.close(); String html = baos.toString(); // 把流中的数据转换成字符串, 采用的编码是: utf-8 // String html = new String(baos.toByteArray(), "GBK"); baos.close(); return html; }}

com.loopj.android.http组件提交方式

package com.itheim28.submitdata;import java.net.URL;import java.net.URLEncoder;import org.apache.http.Header;import com.itheim28.submitdata.utils.NetUtils;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import com.loopj.android.http.RequestParams;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class MainActivity2 extends Activity {	protected static final String TAG = "MainActivity2";	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();	        AsyncHttpClient client = new AsyncHttpClient();        String data = "username=" + URLEncoder.encode(userName) + "&password=" + URLEncoder.encode(password);                client.get("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet?" + data, new MyResponseHandler());	}		public void doPost(View v) {		final String userName = etUserName.getText().toString();		final String password = etPassword.getText().toString();				AsyncHttpClient client = new AsyncHttpClient();        RequestParams params = new RequestParams();        params.put("username", userName);        params.put("password", password);                client.post("http://10.0.2.2:8080/ServerItheima28/servlet/LoginServlet",         		params,         		new MyResponseHandler());	}		class MyResponseHandler extends AsyncHttpResponseHandler {		@Override		public void onSuccess(int statusCode, Header[] headers,				byte[] responseBody) {//			Log.i(TAG, "statusCode: " + statusCode);						Toast.makeText(MainActivity2.this, 					"成功: statusCode: " + statusCode + ", body: " + new String(responseBody), 					0).show();		}		@Override		public void onFailure(int statusCode, Header[] headers,				byte[] responseBody, Throwable error) {			Toast.makeText(MainActivity2.this, "失败: statusCode: " + statusCode, 0).show();		}    }}

转载于:https://my.oschina.net/u/2356176/blog/420612

你可能感兴趣的文章
把txt中的中文字从一行转换到一列存到新文件中
查看>>
人脸对齐
查看>>
用swift+Metal shader文件编译framework动态库
查看>>
在Metal上实现对多通道feature map的双线性插值
查看>>
在ncnn上把玩mobileNet
查看>>
解决UIImage显示方向和内存方向不一致的问题
查看>>
Image-to-Image Translation with Conditional Adversarial Networks笔记
查看>>
ARM NOEN vfmaq_laneq_f32与vextq_f32指令例子
查看>>
在caffe中用python添加confusion matrix层
查看>>
在服务器上配置jupyter notebook
查看>>
调用mosquitto发布消息
查看>>
作为一个新人,怎样学习嵌入式Linux?(韦东山)
查看>>
adr与ldr区别(Mini2440裸机程序阐述)
查看>>
ARM嵌入式开发中的GCC内联汇编__asm__
查看>>
韦东山书中MMU内嵌汇编代码
查看>>
ARM保存中断时,为什么使用“sub lr, lr, #4”
查看>>
Makefile中.PHONY的含义
查看>>
韦东山视频实验之Input子系统分析之一
查看>>
韦东山视频实验之Input子系统分析之二
查看>>
韦东山视频实验之触摸屏
查看>>