• 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接口实现 访问网络
Apche HttpClient 是一个开源项目,从名字上就可以看出,它是一个简单的HTTP客户端(并不是浏览器),可以发送HTTP请求,接受HTTP响应。但是不会缓存服务器的响应,不能执行HTTP页面中签入嵌入的JS代码,自然也不会对页面内容进行任何解析、处理,这些都是需要开发人员来完成的。

  现在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 方式 访问网络 实例的更多相关文章

  1. android 使用httpclient访问网络

    在主活动类中,调用一个线程访问网络(android4.0以上耗时的操作不能放在主线程中):       //声明两个Button对象,与一个TextView对象private TextView mTe ...

  2. HttpConnection方式访问网络

    参考疯狂android讲义,重点在于学习1.HttpConnection访问网络2.多线程下载文件的处理 主activity: package com.example.multithreaddownl ...

  3. Android 多线程通信 访问网络

    package org.rongguang.testthread; import android.app.Activity; import android.os.Bundle; import andr ...

  4. Android 使用 HTTP 协议访问网络

    正在看<第一行代码>,记录一下使用 HTTP 协议访问网络的内容吧! 在Android发送Http请求有两种方式,HttpURLConnection和HttpClient. 1.使用Htt ...

  5. Android访问网络

    Android中访问网络用的是HttpClient的方式,即Apache提供的一个jar包.安卓中继承了改jar包,所以安卓adt中不需要专门import该jar,直接就可以使用. 以下是MainAc ...

  6. Android使用Http协议访问网络——HttpConnection

    套路篇 使用HttpConnection访问网络一般有如下的套路: 1.获取到HttpConnection的实例,new出一个URL对象,并传入目标的网址,然后调用一下openConnection() ...

  7. APN APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。

    apn 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络. 对于手机用户来说,可 ...

  8. Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)

    使用Http的Post方式与网络交互通信.Post方式需要向网络传输一部分数据,同时具有输入流和输出流. 详见:Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例 ...

  9. Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)

    使用Http的Get方式读取网络数据,使用Get方式与网络通信是最常见的Http通信,建立链接之后就可以通过输入流读取网络数据. 详见:Android(java)学习笔记209:采用get请求提交数据 ...

随机推荐

  1. angularjs springMVC 交互

    AngularJS中的$resource使用与Restful资源交互 1.AngularJS中的 $resource 这个服务可以创建一个资源对象,我们可以用它非常方便地同支持RESTful的服务端数 ...

  2. flask-sqlalchemy组件

    一.简介 flask本身没有内置orm框架,需要依赖第三方模块,这里介绍flask-sqlalchemy,而flask-sqlalchemy是一个flask的扩展,本质上是对sqlalchemy的进一 ...

  3. C#基础巩固(3)-Linq To XML 读取XML

    记录下一些读取XML的方法,以免到用的时候忘记了,还得花时间去找. 一.传统写法读取XML 现在我有一个XML文件如下: 现在我要查找名字为"王五"的这个人的 Id 和sex(性别 ...

  4. Luogu P2602 [ZJOI2010]数字计数

    这算是一道数位DP的入门题了吧虽然对于我来说还是有点烦 经典起手式不讲了吧,\(ans(a,b)\to ans(1,b)-ans(1,a-1)\) 我们首先预处理一个东西,用\(f_i\)表示有\(i ...

  5. 【强化学习】python 实现 saras 例一

    本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10146554.html 说明:将之前 q-learning 实现的例一,用 saras 重新 ...

  6. 宇宙最强IDE,查看设计器报错,看不了设计界面

    在使用自定义控件或者用户控件的时候,查看设计器打不开界面的原因: Loaded事件中加以下判断条件:if (!DesignerProperties.GetIsInDesignMode(this))

  7. 利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)

    源码地址 https://github.com/stephen-v/tensorflow_vgg_classify 1. VGG介绍 1.1. VGG模型结构 1.2. VGG19架构 2. 用Ten ...

  8. 利用 John the Ripper 破解用户登录密码

    一.什么是 John the Ripper ? 看到这个标题,想必大家都很好奇,John the Ripper 是个什么东西呢?如果直译其名字的话就是: John 的撕裂者(工具). 相比大家都会觉得 ...

  9. 新人入坑Redis必会的吐血总结

    新人入坑Redis必会的吐血总结 一.什么是Redis Redis是一个使用C语言开发的开源的高性能的key-value存储系统,我们可以把它近似理解为Java Map.简单来讲,Redis是一种NO ...

  10. Unity Jobsystem 详解实体组件系统ECS

    原文摘选自Unity Jobsystem 详解实体组件系统ECS 简介 随着ECS的加入,Unity基本上改变了软件开发方面的大部分方法.ECS的加入预示着OOP方法的结束.随着实体组件系统ECS的到 ...