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请求提交数据 ...
随机推荐
- eclipse 打包
add directory entries 不勾选, spring 自动扫描之类的扫描不到
- Kafka:Configured broker.id 2 doesn't match stored broker.id 0 in meta.properties.
在安装Kafka集群的时候,碰到这个问题. 我们知道在搭建Kafka集群的时候,我们需要设置broker.id,以作为当前服务器在整个集群的唯一标志. 网上搜查资料是说,log.dirs目录下的met ...
- P1438 无聊的数列
P1438 无聊的数列 链接 分析: 等差数列可加,首项相加,公差相加. 代码: #include<cstdio> #include<algorithm> #include&l ...
- 【JVM.6】虚拟机类加载机制
一.概述 虚拟机类加载机制:虚拟机把描述类的数据从Class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型. 与那些在编译时需要进行连接工作的语言不同 ...
- 针对Nginx日志的相关运维操作记录
在分析服务器运行情况和业务数据时,nginx日志是非常可靠的数据来源,而掌握常用的nginx日志分析命令的应用技巧则有着事半功倍的作用,可以快速进行定位和统计. 1)Nginx日志的标准格式(可参考: ...
- linux下用户操作记录审计环境的部署记录
通常,我们运维管理人员需要知道一台服务器上有哪些用户登录过,在服务器上执行了哪些命令,干了哪些事情,这就要求记录服务器上所用登录用户的操作信息,这对于安全维护来说很有必要.废话不多说了,下面直接记录做 ...
- Jenkins构建自动化任务
前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 一.环境配置 1.切换到jenkins ...
- 个人阅读作业Week5
一.总结体会 团队项目已经进行了很多周,我们团队从刚开始的基础薄弱到现在的大家都可以运用Android来编写程序,共同完成一个app的开发使用. 刚开始做团队项目之时,我们团队就开了一个会,确定了以后 ...
- Linux内核分析 笔记七 可执行程序的装载 ——by王玥
一.预处理.编译.链接和目标文件的格式 (一)可执行程序是怎么得来的? 1. 2.可执行文件的创建——预处理.编译和链接 shiyanlou:~/ $ cd Code ...
- Linux内核 实践二
实践二 内核模块编译 20135307 张嘉琪 一.实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容 ...