热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OkHttp的使用

需要导入两个jar包:okhttp-3.0.0-RC1.jarokio-1.6.0

需要导入两个jar包:

okhttp-3.0.0-RC1.jar  okio-1.6.0.jar

package fanggao.qf.okhttptest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.IOException;
import java.io.InputStream;

import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;

public class MainActivity extends AppCompatActivity {

    private TextView textview;
    private static final String url = "http://m2.qiushibaike.com/article/list/text?page=1";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.btn_download);
        textview = (TextView) findViewById(R.id.tv_text);
    }

    /**
     * 点击下载数据
     * @param view
     */
    public void onClick(View view){
        //同步的方式
   /*     new Thread(new Runnable() {
            @Override
            public void run() {
                getDataForGet();
            }
        }).start();*/
        //异步  ,不需要开启子线程
         getAsyncOkHttp();
    }

    /**
     * 异步:同时执行多个
     * 通过get请求获取数据
     *
     */
    private void getAsyncOkHttp() {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().get().url(url).build();
        //异步:
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {

            }

            @Override
            public void onResponse(Response response) throws IOException {
                final String string = response.toString();
                Log.i("tag","------"+Thread.currentThread().getId());
                //不能在子线程中进行UI操作
                //在主线程中进行
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textview.setText(string);
                    }
                });
            }
        });

    }

    /**
     * 同步:一次执行一个
     * 通过get请求获取数据
     */
    private void getDataForGet() {
        try {
        //1.声明okhttp客户端
        OkHttpClient okHttpClient = new OkHttpClient();
        //2.构造request
            //1.声明构造器 ,设置请求方式,设置请求参数
        Request request = new Request.Builder().get().url(url).build();
        //3.通过客户端执行请求,获得response
            Response respOnse= okHttpClient.newCall(request).execute();
            //4,判断响应是否成功
            if(response.isSuccessful()){
                //获得响应实体
                ResponseBody body = response.body();
                //获得string
               final  String string = body.string();
                //获得bytep[]
                byte[] bytes = body.bytes();
                //获得流
                InputStream inputStream = body.byteStream();
                //在主线程中进行
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textview.setText(string);
                    }
                });
            }
            Log.i("tag",Thread.currentThread().getName());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

现象:
技术分享

OkHttp的使用


推荐阅读
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • 自定义RecyclerView添加EmptyView
    你知道RecyclerView里没有Em ... [详细]
  • 2019.4.14第1001题:SumProblemProblemDescriptionHey,welcometoHDOJ(HangzhouDianziUniversityOnli ... [详细]
  • iOS之富文本
    之前做项目时遇到一个问题:使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ... [详细]
  • 作业迁移
    背景:数据库服务器更换,1、数据库迁移(BACKUPRESTORE);2、数据库登录名用户迁移(注意孤立用户);3、作业迁移数据库迁移,备份数据库、拷贝备份文件到新服务器,还原数据 ... [详细]
  • FroggerTimeLimit:1000MSMemoryLimit:65536KTotalSubmissions:32257Accepted:10396DescriptionFr ... [详细]
  • 代码:在mysql5.6,运行正常,5.7报错SELECTsum((selecta.numwherea.status1))astotalFROMmes_order_productA ... [详细]
  • Git(1)
    安装Git完毕(在开始菜单打开的话,打开的不是你想要的路径,切换路径很麻烦)1.D盘新建GitTest文件夹2.打开GitTest,在空白的地方右键,3.单击GitBashHere ... [详细]
  • python基础(二、pycharm安装、卸载)
    3.在Ubuntu中安装PyCharmPyCharm的官方网站地址是:https:www.jetbrains.compycharm注意:安装时不要使用root用户安装,否则后期使用 ... [详细]
  • 这一篇主要总结一下jQuery这个js在引入的时候做的一些初始化工作第一句window.undefinedwindow.undefined;是为了兼容低版本的IE而写的因为在低版本 ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • MyBatis模糊查询和多条件查询一、ISmbmsUserDao层根据姓名模糊查询publicListgetUser();多条件查询publicList ... [详细]
  • 【自制小工具】代码生成器
    【自制小工具】代码生成器陆陆续续接触过好几款代码生成工具,发现确实好用,但都会有那么点不完善的地方,所以索性就自己做一个吧。界面非常简单,反正是自己用的,简单点用起来也方便上图:左 ... [详细]
  • kepserver中文手册,kepserver使用教程,kepserver设置
    下面介绍一下KepServer模拟器的使用,以下示例使用服务器随附的Simulator驱动程序来演示创建、配置和运行项目的过程。Simulator驱动程序是基于内存的驱动程序,能为 ... [详细]
  • 论文阅读及复现 | Improved Semantic Representations From TreeStructured Long ShortTerm Memory Networks
    两种形式的LSTM变体Child-SumTree-LSTMsN-aryTree-LSTMshttps:paperswithcode.compaperimproved-semanti ... [详细]
author-avatar
初2新生_349
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有