android post 方式 访问网络 实例
- android post 方式 访问网络 实例
因为Android4.0之后对使用网络有特殊要求,已经无法再在主线程中访问网络了,必须使用多线程访问的模式
该实例需要在android配置文件中添加 网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
android版本 最低API
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17" />
package com.app.urltest; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.view.Menu;
import android.widget.TextView; public class MainActivity extends Activity {
TextView textView;
// 网络地址
String urlPath = "http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx"
+ "/getStationAndTimeByStationName";
// 请求参数
String requestStr = "StartStation=北京&ArriveStation=上海&UserID=";
/*
* 网络连接 讲uripath 转换成URL对象 连接请求 需用 URL对象的openConnection
* 方法得到一个连接对象httpUrlConnection 设置请求参数: 超时 请求方式 读写 内容类型 长度 ... 发送请求参数:得到输出流
* 吧请求参数写到输出流 服务器响应: 从响应 (输入)流中得到 数据 需用ANdroidManifest中添加 访问网络权限
*/
public String connectNework() { try {
// 创建URL
URL url = new URL(urlPath);
// 获得连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置请求参数
connection.setReadTimeout(3000);// 超时
connection.setRequestMethod("POST");// 请求方式
connection.setDoInput(true);// 可读写
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");// 设置请求 参数类型
byte[] sendData = requestStr.getBytes("UTF-8");// 将请求字符串转成UTF-8格式的字节数组
connection.setRequestProperty("Content-Length", sendData.length
+ "");// 请求参数的长度 OutputStream outputStream = connection.getOutputStream();// 得到输出流对象
outputStream.write(sendData);// 发送写入数据 /*//获得 服务器响应代码
int code = connection.getResponseCode();
if(code==20){
//获取数据
}
*/
// 响应
InputStream inputStream = connection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bReader = new BufferedReader(inputStreamReader);
String str = "";
String temp = "";
while ((temp = bReader.readLine()) != null) {
str = str + temp + "\n";
}
return str;// 返回响应数据 } catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} @Override
protected void onCreate(Bundle savedInstanceState) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDialog() ////打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll()
.penaltyLog()
.build()); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView1);
new Thread(runnable).start(); }
String text;
//使用Handler 对象更新主UI
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
/*方式二: 使用Bundle接收数据
* Bundle data = new Bundle()
* String text =data.getString("s",s);
*
*/
//显示到控件
textView.setText(text); };
};
Runnable runnable = new Runnable() { @Override
public void run() {
//连接网络请求
text = connectNework();
Message msg = new Message();
/* 使用Bundle对象 传送数据
* Bundle data = new Bundle();
* data.putString("s",s);
* msg.setData(data);
*
*/
handler.sendMessage(msg);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
- Apche接口实现 访问网络
现在Android已经成功集成了HttpClient,所以开发人员在Android项目中可以直接使用HttpClient来想Web站点提交请求以及接受响应,如果使用其他的Java项目,需要引入进相应的Jar包。HttpClient可以在官网上下载:http://hc.apache.org/downloads.cgi
package com.app.apachehttpclient; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List; import org.apache.http.HttpResponse;
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.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView; public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll().penaltyLog().penaltyDialog() // //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll()
.penaltyLog().build());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String url_service = "http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx"
+ "/getStationAndTimeByStationName";
// 创建一个请求
HttpPost httpPost = new HttpPost(url_service);
List params = new ArrayList();
// 设置参数
params.add(new BasicNameValuePair("StartStation", "北京"));// 始发站
params.add(new BasicNameValuePair("ArriveStation", "上海"));// 到达站
params.add(new BasicNameValuePair("UserID", ""));// 用户ID
try {
// 设置编码
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
// 发送请求 并获得反馈
HttpClient httpClient = new DefaultHttpClient();
HttpResponse httpResponse = httpClient.execute(httpPost);
// 解析返回的数据
if (httpResponse.getStatusLine().getStatusCode() != 404) {//判断服务器状态
String result = EntityUtils.toString(httpResponse.getEntity());
System.out.println(result);
// 显示到控件
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.setText(result);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
android post 方式 访问网络 实例的更多相关文章
- android 使用httpclient访问网络
在主活动类中,调用一个线程访问网络(android4.0以上耗时的操作不能放在主线程中): //声明两个Button对象,与一个TextView对象private TextView mTe ...
- HttpConnection方式访问网络
参考疯狂android讲义,重点在于学习1.HttpConnection访问网络2.多线程下载文件的处理 主activity: package com.example.multithreaddownl ...
- Android 多线程通信 访问网络
package org.rongguang.testthread; import android.app.Activity; import android.os.Bundle; import andr ...
- Android 使用 HTTP 协议访问网络
正在看<第一行代码>,记录一下使用 HTTP 协议访问网络的内容吧! 在Android发送Http请求有两种方式,HttpURLConnection和HttpClient. 1.使用Htt ...
- Android访问网络
Android中访问网络用的是HttpClient的方式,即Apache提供的一个jar包.安卓中继承了改jar包,所以安卓adt中不需要专门import该jar,直接就可以使用. 以下是MainAc ...
- Android使用Http协议访问网络——HttpConnection
套路篇 使用HttpConnection访问网络一般有如下的套路: 1.获取到HttpConnection的实例,new出一个URL对象,并传入目标的网址,然后调用一下openConnection() ...
- APN APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。
apn 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络. 对于手机用户来说,可 ...
- Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
使用Http的Post方式与网络交互通信.Post方式需要向网络传输一部分数据,同时具有输入流和输出流. 详见:Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例 ...
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)
使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据 ...
随机推荐
- C#的delegate简单练习
delegate中文的意思为委托. 在很久之前,Insus.NET有写过一篇<用一个简单的例子来演绎事件委托>http://www.cnblogs.com/insus/p/3732075. ...
- flask-sqlalchemy组件
一.简介 flask本身没有内置orm框架,需要依赖第三方模块,这里介绍flask-sqlalchemy,而flask-sqlalchemy是一个flask的扩展,本质上是对sqlalchemy的进一 ...
- Intellij IDEA的下载和使用(针对学生的免费使用计划)
一.下载和使用授权(针对学生) 1.下载 可以在Intellij IDEA官网上下载需要的版本.下载地址:https://www.jetbrains.com/idea/ 2.学生免费试用 首先,你得现 ...
- 介绍HTTP协议的传输过程
1.HTTP是面向事物的应用层协议,它使用TCP连接进行可靠传输,服务器默认监听在80端口 2.服务流程 从协议执行过程来说,当浏览器要访问www服务器时,首先要对服务器进行域名解析(DNS协议).一 ...
- 【JVM.8】类加载及执行子系统的案例与实战
一. 案例分析 1. Tomcat:正统的类加载器架构 主流的Java Web服务器,如Tomcat.Jetty.WebLogic.WebSphere或其他服务器,都实现了自己定义的类加载器(一般都不 ...
- 5分钟入门自动化测试——你应该学会的Postman用法(2)
前言 之前的一篇文章<你应该学会的Postman用法>,主要介绍了postman的一些高级的用法,便于日常开发和调试使用,本文的基础是对postman的基本使用以及一些高级用法有一定的了解 ...
- Jmeter(三十五)_精确实现网页爬虫
Jmeter实现了一个网站文章的爬虫,可以把所有文章分类保存到本地文件中,并以文章标题命名 它原理就是对网页提交一个请求,然后把返回的所有值提取出来,利用ForEach控制器去实现遍历.下面来介绍一下 ...
- C_数据结构_循环队列
# include <stdio.h> # include <malloc.h> typedef struct Queue { int * pBase; int front; ...
- 网易2018.03.27算法岗,三道编程题100%样例AC题解
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8660814.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 继承:call、apply、bind方法
javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. call,apply,bind这 ...