-
OkHttp获取网络数据
2017-10-15 18:36:51OkHttp获取网络数据 1.导依赖 compile 'com.squareup.okio:okio:1.5.0' compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' compile '...OkHttp获取网络数据
1.导依赖
compile 'com.squareup.okio:okio:1.5.0'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.google.code.gson:gson:2.8.2'2.加以下权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>3.单例
4.MainActivity get post获取数据加网络判断图片上传
5.创建一个Bean类
6.导工具类Utils
-
okHttp3.0获取网络数据
2017-04-19 09:39:56okHttp3.0获取网络数据 听到okHttp以后首先查了一下goole浏览器等等(关于它的相关信息)还是根据了一个大牛(hongYang)的一些相关文档 根据他的文档进行一步步的做就完成了;(是不是感觉很简单,下面我们就来具体...okHttp3.0获取网络数据
听到okHttp以后首先查了一下goole浏览器等等(关于它的相关信息)还是根据了一个大牛(hongYang)的一些相关文档
根据他的文档进行一步步的做就完成了;(是不是感觉很简单,下面我们就来具体的说一下我的步骤吧!)
okHttp获取网络数据分为简单获取和封装获取:
简单获取:就是直接get,post
get请求数据:首先是定义一个方法:在方法中进行(1)创建一个request请求对象进行将url赋值如下所示:
// 创建一个request对象 Request request = new Request.Builder() .url(url) .build();
创建一个okHttpClient对象,通过它调用newCall(request请求对象).enqueue(接口回调)等等方法在接口回调的方法中进行获取数据并进行发送handler消息进行更新UI数据的操作 如下所示
Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { String s = response.body().string(); Log.e("============", s+""); // 解析数据 list = initGson(s); Message message2 = Message.obtain(handler,0,list); message2.sendToTarget(); } });
此方法的获取数据方式比较麻烦因为需要用到子线程与handler发送消息等等
切记:此方法中okHttp本身没有进行子线程和主线程的操作所以此时需要我们自己手动的交互 如下所示:
// 初始化数据 new Thread(new Runnable() { @Override public void run() { /** * 因为请求数据的时候 需要进行耗时操作 * 所以此时就要用到了子线程的请求 * 和handler一起用到 */ try { initData(); } catch (Exception e) { e.printStackTrace(); } } }).start();
Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: List<JsonBean.TrailersBean> list = (List<JsonBean.TrailersBean>) msg.obj; for(int i=0;i<list.size();i++){ String movieName = list.get(i).getMovieName(); Log.e("=====name===",movieName); } // 进行适配器 initAdapter(list); break; } } };
紧接着进行post的发送方法
Request request = buildMultipartFormRequest(url, new File[]{file}, new String[]{fileKey}, null);
FormEncodingBuilder builder = new FormEncodingBuilder();
builder.add("username","张鸿洋");Request request = new Request.Builder()
.url(url)
.post(builder.build())
.build();
mOkHttpClient.newCall(request).enqueue(new Callback(){});
上面的操作就是我按照(hongYang)博客中进行的操作 其实post请求就是请求对象那有一些不同与get请求
下面的操作就和get请求都一样了
下面咱们就来看一下封装后的OkHTTP网络请求
首先我们应该先要弄清楚我们为什么要做这项工作?(上面的okHttp请求数据操作已经看到了是不是感觉比较麻烦还需要定义子线程和handler的消息交互等等)而我们现在要做的就是不需要自己定义子线程和Handler的操作让后台直接完成好之后我们直接调用他
现在让我们来进行一下具体操作:
第一,我们可以自己封装一个依赖库(或者你可以下载一个开源的依赖库我是直接下载别人的依赖库大家可以随意)
第二,导入别人的依赖库肯定会有错误(有可能会报API版本的错误或者会报
PersistentCookieJar:v0.9.3的错误
)此时就需要进行查询方法:我在gittub网站上搜索
PersistentCookieJar的用法 通过人家的用法 进行一步步修改
Step 1. Add the JitPack repository in your root build.gradle at the end of repositories:
allprojects { repositories { maven { url "https://jitpack.io" } } }
在glide文件中将无用的方法注销掉 等等 我遇到的错误就这么多 如果还有的话希望大家再根据不同的错误寻找不同的解决方法
以上是我们导入依赖库所遇到的一系列问题 及解决方法 接下来我们就开始在代码中的实现了
首先现在在进行网络的请求所以切记不要忘记加网络权限
代码块 :第一步 首先来get封装的获取数据如下所示
String url = "http://www.zhiyun-tech.com/App/Rider-M/changelog-zh.txt"; url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api"; OkHttpUtils .get() .url(url) .id(100) .build() .execute(new MyStringCallback());
从方法中不难看出他是根据OKHttpUtils工具类进行的操作 请求方式 路径 id build execute(自定义接口回调)
如下所示
public class MyStringCallback extends StringCallback { @Override public void onBefore(Request request, int id) { setTitle("loading..."); } @Override public void onAfter(int id) { setTitle("Sample-okHttp"); } @Override public void onError(Call call, Exception e, int id) { e.printStackTrace(); tv_01.setText("onError:" + e.getMessage()); } @Override public void onResponse(String response, int id) { Log.e(TAG, "onResponse:complete"); tv_01.setText("onResponse:" + response); switch (id) { case 100: Toast.makeText(FengActivity.this, "http", Toast.LENGTH_SHORT).show(); break; case 101: Toast.makeText(FengActivity.this, "https", Toast.LENGTH_SHORT).show(); break; } } @Override public void inProgress(float progress, long total, int id) { Log.e(TAG, "inProgress:" + progress); // mProgressBar.setProgress((int) (100 * progress)); } }
大家可以直接复制粘贴就行了
在此接口中不难发现 首先它是实现了一个stringCallBack接口 重写了它里面的一系列方法 在此方法中进行了一系列的操作 在这个接口中还对http https 进行了判断 大家可以根据不同的需求 进行不同的操作
还有一个post请求 我们现在就不解释太多了 因为post方法和get方法中没有什么不同 无非就是请求方式为post而已
接下来我们就看一下具体代码的实现吧
public void postDataOkHttp() { String url = "http://www.zhiyun-tech.com/App/Rider-M/changelog-zh.txt"; // url="http://www.391k.com/api/xapi.ashx/info.json?key=bd_hyrzjjfb4modhj&size=10&page=1"; url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api"; OkHttpUtils .post() .url(url) .id(100) .build() .execute(new MyStringCallback()); }
接口还是get方法中的接口所以大家直接可以复制过来就行了 在这里我们就不多说了以上就是我们的okHttp的网络请求 它还可以进行上传文件和下载文件等等方法 我们下次再细细说明
-
android-如何获取网络数据
2017-02-16 10:58:17android-如何获取网络数据先确定网络是否连接正常,这里我获取的是Tomcat下的一个XML
1.先配置加权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2,.写布局文件及Java代码public void parseXML(View view){ new MyTask().execute(); } //异步任务类 AsyncTask class MyTask extends AsyncTask{ @Override protected Object doInBackground(Object[] objects) { //01.获取网络XML数据 //URLConnection try { URL url=new URL("路径"); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //设置请求方式‘ connection.setRequestMethod("GET"); //设置请求连接超时的时间(优化) connection.setConnectTimeout(10000); //获取结果码,通过结果码进行判断 int code=connection.getResponseCode(); if(code==200){ //获取服务器返回过来的结果 InputStream is=connection.getInputStream(); //打印 BufferedReader br=new BufferedReader(new InputStreamReader(is)); String str=null; while((str=br.readLine())!=null){ Log.i("test",str); }
-
Flutter 通过API获取网络数据并解析
2018-07-03 16:16:27首先通过API获取网络数据这个过程是耗时的,所以我们需要进行异步操作,使用Dart语言完成异步可以参考如下的文章https://www.jianshu.com/p/f2f7634b602c1.网络请求直接进入正题,首先我进行网络请求是通过一个工具...首先通过API获取网络数据这个过程是耗时的,所以我们需要进行异步操作,使用Dart语言完成异步可以参考如下的文章
https://www.jianshu.com/p/f2f7634b602c
1.网络请求
直接进入正题,首先我进行网络请求是通过一个工具类,大家可以直接使用
import 'package:http/http.dart' as http; import 'dart:convert'; class NetUtils { static void get(String url, Function callback, {Map<String, String> params, Function errorCallback}) async { if (params != null && params.isNotEmpty) { StringBuffer sb = new StringBuffer("?"); params.forEach((key, value) { sb.write("$key" + "=" + "$value" + "&"); }); String paramStr = sb.toString(); paramStr = paramStr.substring(0, paramStr.length - 1); url += paramStr; } // print("$url"); try { http.Response res = await http.get(url); if (callback != null) { callback(res.body); } } catch (exception) { if (errorCallback != null) { errorCallback(exception); } } } static void post(String url, Function callback, {Map<String, String> params, Function errorCallback}) async { try { http.Response res = await http.post(url, body: params); if (callback != null) { callback(res.body); } } catch (e) { if (errorCallback != null) { errorCallback(e); } } } }
我现在使用一下,这个data就是返回的Gson字段
NetUtils.get(url, (data) { }, errorCallback: (e) { print("network error: $e"); });
2.解析Gson字段
虽然获取了Gson字段,但是我们还不能获取我们想要的数据,这样和java一样,需要解析Gson字段,这个flutter有相关的API实现了,我们需要导一下包,虽然这个包在NetUtil导入过,但是flutter不能间接导包
然后使用import 'dart:convert';
NetUtils.get(url, (data) { if (data != null) { var obj = json.decode(data); if (obj['error'] == false) { //print(obj); setState(() { MyApp.text = obj['results'][0]['desc']; if (MyApp.text==null){ MyApp.text=' '; } }); } } }, errorCallback: (e) { print("network error: $e"); });
3.完整的例子
就是通过干货集中营的API获取网络数据,将其中一个分享的标题显示出来。
这里要注意的是非交互型控件StatelessWidget是不能刷新的,而网络数据获取后需要刷新控件显示,所以我们需要自己自定义一个交互型控件,这个可以参考如下文章
https://blog.csdn.net/z979451341/article/details/80817609
好了,大家看代码
import 'dart:async'; import 'package:flutter/material.dart'; import 'dart:convert'; import 'NetUtils.dart'; import 'AndroidBean.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { static String text='Hello World'; @override Widget build(BuildContext context) { return MaterialApp( title: 'Welcome to Flutter', home: Scaffold( appBar: AppBar( title: Text('Welcome to Flutter'), ), body: Center( child: ParentWidget(), ), ), ); } } class ParentWidget extends StatefulWidget { @override _ParentWidgetState createState() => new _ParentWidgetState(); } class _ParentWidgetState extends State<ParentWidget> { bool _active = false; @override Widget build(BuildContext context) { getNetData(); return new Container( child: new Text(MyApp.text) ); } getNetData() async { var url = 'http://gank.io/api/data/Android/10/1'; NetUtils.get(url, (data) { if (data != null) { var obj = json.decode(data); if (obj['error'] == false) { //print(obj); setState(() { MyApp.text = obj['results'][0]['desc']; if (MyApp.text==null){ MyApp.text=' '; } }); } } }, errorCallback: (e) { print("network error: $e"); }); } }
AndroidBean.dart
class AndroidBean{ String desc; List<String> images; String url; String who; static List androidData; }
4.最后
我要做一个比较完整的app,敬请期待
-
JSON异步获取网络数据
2015-03-08 17:09:06//定义一个方法来获取网络数据,接受参数为网址 func onSearch(url: String){ //定义一个NSURL var nsUrl: NSURL = NSURL(string: url)! //定义一个NSURLRequest var request: ... -
android开发之获取网络数据
2014-04-25 21:54:22android开发之获取网络数据 获取网络图片 首先我们需要把界面搭建好 [html] view plaincopyprint? xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android=... -
objective-c中获取网络数据的办法(1)同步下载数据
2015-09-20 15:34:55直接使用nsdata的方法获取网络数据 -
Android异步加载获取网络数据(图片)
2015-06-15 17:03:34在Android中获取网络数据是非常重要的,也是非常耗时的一个操作。笔者知道一般是用两种方式来获取网络数据: 1、开启一条子线程来实现。 2、采取异步加载的方式。 好了,不废话了,直接上代码! 1、Activity -
cocos2dx lua http请求获取网络数据:
2017-06-06 16:24:52cocos2dx lua http请求获取网络数据: [plain] view plain copy print? local xhr = cc.XMLHttpRequest:new() --创建一个请求 xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_STRING... -
移动端获取网络数据优化的几个点
2016-02-15 14:20:58http://www.zhihu.com/question/36654270/answer/70041187移动端获取网络数据优化的几个点 1. 连接复用 : 节省连接建立时间,如开启 keep-alive。 对于 Android 来说默认情况下 HttpURLConnection 和 HttpClient ... -
求代码-swift异步获取网络数据,并封装该类
2016-09-02 03:07:50这个是一个天气预报api接口 https://api.thinkpage.cn/v3/weather/now.json?key=qc4mshzxtwmicrsa&location=ip&language=zh-Hans&unit=c 求代码,用swift异步获取网络数据并封装该类 -
采用retrofit获取网络数据
2016-05-24 21:41:11本文采用retrofit网络请求库获取聚合网数据,文中的例子是电话号码归属地查询, 其请求接口如下: 首先添加retrofit依赖: compile 'com.squareup.retrofit2:retrofit:2.0.2' 如果需要解析返回的json... -
iOS使用AFNetWorking获取网络数据时遇到的问题??
2015-11-13 10:16:40最近在使用AFNetWorking获取网络数据时,数据库中的值类型是double类型,数值是-74.240,但是用AFNetWorking获取解析后的数据,此时的数据变成了-74.23999.... 不知道这是什么鬼?!!! 然后我又单独的测试... -
麻烦解释一下用信号量来异步获取网络数据的代码
2016-08-31 03:19:51func sessionLoadData(){ ... let url1:NSURL! = NSURL(string: urlString) ... let request:NSURLRequest = NSURLRequest(URL: url1) ... 这一段代码是怎么用信号量来做到异步获取网络数据的,请大神指导 -
python request 获取网络数据
2018-01-23 22:49:24# encoding=utf-8 import requests import json import pandas as pd url = 'https://api.github.com/repos/pydata/pandas/milestones/28/labels' resp = requests.get(url) print 'resp:=\n', resp data = json.lo -
ExpandableListView如何获取网络数据?
2016-10-17 02:35:34其中二级数据是一个字符串,需要分割成一个集合.求大虾 -
ImageLoader获取网络数据图片
2017-11-14 14:54:05//获取列表数据 new MyTask().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1"); } class MyTask extends AsyncTask, Void, String> { @Override protected ... -
【原创】东方耀reactnative 视频26之-仿异步获取网络数据
2016-09-19 07:23:05进入首页homeui获取网络数据 android原生开发: 子线程 handler机制,异步作务asynctask reactnative擅长ui界面处理,通过this.state来触发 rn中的网络请求: xmlhttprequest fetch post get -
Paging按页获取网络数据实例
2019-03-07 17:48:11如果应用程序不小心,它可能最终会请求它实际上不需要的数据,从而给设备和网络带来性能负担。如果数据与远程数据库存储或同步,则这也会降低应用速度并浪费用户的数据计划。 而谷歌推出的paging library 可以让 ... -
使用GDAL获取网络数据
2012-08-18 18:03:47GDAL中提供了一个访问网络数据的接口,具体的帮助文档可以访问这里(http://gdal.org/cpl__http_8h.html)。不过前提是GDAL需要依赖一个第三方的开源库libcurl,libcurl主要功能就是用不同的协议连接和沟通不同的... -
Flutter 获取网络数据及渲染列表
2019-07-31 09:53:00还是通过Dio包调用远程接口获取数据,这里返回值为一个Future,这个对象支持一个等待回掉方法then。 示例代码如下: import 'package:flutter/material.dart'; import 'package:dio/dio.dart'; class Test... -
获取网络数据中的数组显示成ListView的简单流程
2013-11-01 17:45:21定义一个线程池 ExecutorService pool = ...运用线程获取网络数据 即编辑相关的访问方法以及参数 public static String sendDataByHttpClientPost(String url, List parameters) throws Exception { Ht -
Android通过URL获取网络数据
2014-03-30 23:48:14本实例主要是通过URL获取网络资源,在具体一点,就是简单介绍如何获取网页文本资源。获取网络资源还有获取图片、视频、音频……资源,框架基本相似。 实验时出现两点小问题:1、抛出Connection Refused的异常; ... -
我是如何通过获取网络数据,做出这些数据分析项目的
2019-09-18 14:38:19最近有很多人在问,我是如何收集网络的数据,如何进行数据处理、数据分析以及可视化呈现的。也有人问的更具体,关于Python数据分析的一些问题。到底应该怎么学?如何快速入门,... -
Nodejs获取网络数据并生成Excel表格
2015-07-12 17:58:59Nodejs的模版中有很多关于Excel表格的,这里我简单介绍一下我使用过的一个模块的使用。首先,先安装Excel的模块:npm ...最后,获取数据并写入Excel:var fs = require('fs'); var xlsx = require('node-xlsx');var -
Flutter笔记: 获取网络数据及渲染列表
2018-08-27 09:55:45本篇文章记录我在使用Flutter开发中如何请求后端接口获取数据, 使用到的包有http用来发送请求,async提供Future抽象类以及convert用来将json数据转换为dart里面的对象。 首先使用flutter create xxx 命令或者 IDEA ...