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、参考博文:

http://www.2cto.com/kf/201505/397557.html

http://blog.csdn.net/lmj623565791/article/details/47911083

6、对于Request对象是如何实例化的,大家可以参考--java builder模式

http://www.cnblogs.com/moonz-wu/archive/2011/01/11/1932473.html

时间: 2024-10-01 03:15:18

Android网络开发之OkHttp--基本用法POST的相关文章

Android网络开发之OkHttp--基本用法GET

1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过同步GET访问网络,主要分为四步: (1).声明并实例化一个OkHttpClient对象. (2).声明并实例化一个Request对象,并设置URL等参数. (3).执行Request请求,并获得一个Response对象. (4).根据Response的isSuccessful()方法,判断是否成功,然后从Response对象中获取返回数据. 3.通过异步GET访问网络和同步GET是一样的,不过处理返回数据实在CallB

Android网络开发之Volley--Volley基本用法(三)

1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageRequest对象加入RequestQueue队列 (3).执行start()方法 2.ImageLoader用法 (1).实例化一个RequestQueue对象 (2).实例化一个ImageLoader对象 (3).实例化一个ImageListener对象 (4).执行ImageLoader对象的get()

Android网络开发之Volley--Volley基本用法(一)

1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入RequestQueue队列 (3).执行start()方法 public class StringActivity extends Activity { private TextView mTvShow; private RequestQueue requestQueue; @Override protecte

Android网络开发之OkHttp--基本用法实例化各个对象

1.实例化OkHttpClient对象,OkHttpClient包含了以下属性,以及set()和get()方法.但并没有包含具体的执行方法,详情见源码. //实例化OkHttpClent对象 private OkHttpClient client = new OkHttpClient(); private static SSLSocketFactory defaultSslSocketFactory; private final RouteDatabase routeDatabase; priv

Android网络开发之用tcpdump抓包

Android开发过程中,当涉及到网络通信的时候,有一些字段需要抓包获取.我之前因为SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对比发现了这个困扰我很久的问题.总之,掌握在Android手机里面抓包是很有必要的. 准备工作:Android系统的手机,网络环境,tcpdump,破解手机root权限,建议最好在手机里面安装RE文件管理器并且给root权限.具体步骤如下: 首先,通过adb工具将tcpdump推送到手机,tcpdump的下载地址为:http://www.strazzere

Android网络开发之WIFI

WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为"热点".        在Android中对Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面,主要包括以下几个类和接口:   1.ScanResult    主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信

android开发之synchronized的用法

android开发之synchronized的用法 在android开发中synchronized主要有四种用法.第一是在方法声明时使用:第二是在对某一代码块时使用:第三是对某一对象使用:第四是对某一类使用.具体的实现代码如下: 1.方法声明时使用 放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线

Android 安全开发之 ZIP 文件目录遍历

1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在"../"的字符串,攻击者可以利用多个"../"在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接so.dex或者odex文件,轻则产生本地拒绝服务漏洞,影响应用的可用性,重则可能造成任意代码执行漏洞,危害用户的设备安全和信息安全.比如近段时间发现的"寄生兽"漏洞.海豚浏览器远程命令执行漏洞.三星默认输入法远程代码执行漏洞等都与ZIP文件目录遍历有

Android快速开发之appBase——(6).HttpReq和APICloudSDK

Android快速开发之appBase--(6).HttpReq和APICloudSDK HttpReq和APICloudSDK都是网络请求组件,都是基于xUtils的HttpUtils重新封装的.接下来讲一下使用方法. 1.HttpReq 看以看到有这么几个方法 GET:GET方式请求 POST:普通的POST表单提交 POST:将数据以流的形式传递 /** * POST请求,用InputStream的方式传递请求参数 * * @param api * 接口地址 * @param reques