Android网络开发之OkHttp--基本用法POST
1、OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar
2、通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程。主要分为五步:
(1)、声明并实例化一个OkHttpClient对象
(2)、声明并实例化一个RequestBody对象
(3)、声明并实例化一个Request对象
(4)、执行Request请求,并得到一个Response对象
(5)、根据Response的isSuccessful()方法判断是否成功,然后从Response对象中获取返回数据。
3、
public class PostActivity extends Activity {
private OkHttpClient client = new OkHttpClient();
private TextView mTvPost;
private String url = "https://www.baidu.com/";
private String result = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post);
initView();
new Thread(postThread).start();
}
public void initView(){
mTvPost = (TextView) findViewById(R.id.tv_post_show);
}
private Handler postHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
mTvPost.setText(result);
};
};
private Thread postThread = new Thread(){
public void run() {
try {
run();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
postHandler.sendEmptyMessage(0);
};
};
/** Posting a String */
public static final MediaType jsonReq = MediaType.parse("application/json;charset=utf-8");
public void run() throws IOException {
RequestBody body = RequestBody.create(jsonReq, "{\"name\", \"name\"}");
Request request = new Request.Builder().url(url).post(body).build();
Response response = client.newCall(request).execute();
result += response.body().string();
}
/** Posting a File */
public static final MediaType MEDIA_TYPE_MARKDOWN1 = MediaType.parse("text/x-markdown;charset=utf-8");
public void run2() throws Exception {
File file = new File(Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/IMG_20151030_205855.jpg");
Request request = new Request.Builder().url(url).post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file)).build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()){
result += "出错" + response;
}else{
result += "没有出错" +response.body().string();
}
}
/** Posting from parameters */
public void run3() throws Exception {
RequestBody formBody = new FormEncodingBuilder().add("search","Jurassic Park").build();
Request request = new Request.Builder().url(url).post(formBody).build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()){
result += "出错了";
}else{
result += response.body().toString();
}
}
/** Posing Json with Gson */
private final Gson gson = new Gson();
public void run5() throws Exception {
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()){
result += "出错了";
}else{
Gist gist = gson.fromJson(response.body().charStream(), Gist.class);
for (Map.Entry<String, GistFile> entry : gist.files.entrySet()) {
result += entry.getKey() + entry.getValue().content;
}
}
}
static class Gist {
Map<String, GistFile> files;
}
static class GistFile {
String content;
}
}
4、访问网络不能在主线程中进行,还有不要忘记加入访问网络的权限。
<uses-permission android:name="android.permission.INTERNET" />
5、对于Request对象是如何实例化的,大家可以参考--java builder模式
http://www.cnblogs.com/moonz-wu/archive/2011/01/11/1932473.html
6、参考博文:
http://www.2cto.com/kf/201505/397557.html
Android网络开发之OkHttp--基本用法POST的更多相关文章
- Android网络开发之OkHttp--基本用法GET
1.OkHttp框架使用了OkIo.jar包,不要忘记添加. 2.对于Request对象是如何实例化的,大家可以参考--java builder设计模式 http://www.cnblogs.com/ ...
- Android网络开发之Volley--Volley基本用法ImageRequest(三)
1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageReque ...
- Android网络开发之Volley--Volley基本用法JsonObjectReques(二)
1.JsonObjectRequest用法 用法和StringRequest基本相同,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置JsonObjectRequest对象 ...
- Android网络开发之Volley--Volley基本用法StringRequest(一)
1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入Request ...
- Android网络开发之OkHttp--基本用法实例化各个对象
1.实例化OkHttpClient对象,OkHttpClient包含了以下属性,以及set()和get()方法.但并没有包含具体的执行方法,详情见源码. //实例化OkHttpClent对象 priv ...
- Android 网络开发之WIFI
WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为&qu ...
- Android网络开发之用tcpdump抓包
Android开发过程中,当涉及到网络通信的时候,有一些字段须要抓包获取.我之前由于SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对照发现了这个困扰我非常久的问题.总之,掌握在Androi ...
- Android网络开发之Volley--Volley自定义Request
1.自定义一个解析Json的Request,这里使用JackSon框架来解析Json.你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json. 2.我们首先来看一下Stri ...
- Android网络开发之WIFI
WIFI全称Wireless Fidelity, 又称802.11b标准.WIFI联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance( ...
随机推荐
- LeetCode OJ 82. Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...
- 第5章 字符串----char与String
1.java有8种基本数据类型: 数值型:整数类型(byte,short,int,long) :浮点类型(float,double) 字符型:char 布尔型:true,false 2.char: ...
- 5.如果第4题中在DOS命令下输入:java Hello 出现以下结果:Bad command or the file name 可能是什么原因?请说明理由。
1.没有输入javac指定路径,而是直接输入java Hello. 2.前面已经用过一次指令,没有重新输入路径.
- MySQL数据备份和恢复
1.数据备份 mysqldump -uroot -p databasename > file.sql 2.数据还原 mysql -u root -p databasename < file ...
- 使WiFi具有保存历史连接的功能
在wpa_supplicant.conf里面添加这个功能 update_config=1 就能更新了,保存了历史的连接AP,不用再输入密码
- Tab选项卡的原生写法
关键点:建立点击事件和显示事件的连接,即点li 1让对应的div1出来,很容易想到遍历.索引 ;;} ul,li{list-style: none;} .tab{background: rgba(2, ...
- Java-枚举介绍
需求:今天遇到一个问题,就是返回某些固定的int值,要用到枚举. 下面开始介绍: 无参构造方法的枚举 enum Color{ YELLOW,BLUE,RED } 解析:首先Color本身是一个枚举,里 ...
- Android中ViewPager如何设置不能通过屏幕左右滑动来切换页面
//很多时候,我想禁止用户通过屏幕的左右滑动来切换界面!如何实现! //创建一个类继承viewpager,实现 onTouchEvent 和 onInterceptTouchEvent方法,都 ...
- CenOS下LAMP搭建过程
CentOS虚拟机中安装LAMP: Linux+Apache+MySQL+PHP 安装前先关闭防火墙和Selinux 把所有安装包解压到/lamp下(根目录下的lamp目录) 安装gcc, gcc-c ...
- android 5.0
google 2014开发大会发布了全新的设计语言Material Design,并计划将其应用到Android.Chrome OS和网页等平台上,而最新发布的Android L系统就采用了这种设计语 ...