Android实例之必应每日一图

Android实例之必应每日一图,第1张

概述Android实现每天更新一张图片第一次写博客,记录一下自己学习android过程中做过的一些实例。必应官网每天都会更新一张图片,我们可以通过这张图片的链接来获取这张图片,并让其显示在androidapp中。一、图片的获取必应提供了一个图片的接口,我们可以通过访问这个接口来获取每 AndroID实现每天更新一张图片

第一次写博客,记录一下自己学习androID过程中做过的一些实例。

必应官网每天都会更新一张图片,我们可以通过这张图片的链接来获取这张图片,并让其显示在androID app中。

一、图片的获取

必应提供了一个图片的接口,我们可以通过访问这个接口来获取每日更新的图片,接口链接如下所示:https://cn.bing.com/HPImageArchive.aspx?format=Js&IDx=0&n=1
通过浏览器访问该链接可以得到以下所示数据

{“images”:[{“startdate”:“20210124”,“fullstartdate”:“202101241600”,“enddate”:“20210125”,“url”:"/th?ID=OHR.ChurchRock_ZH-CN6926315999_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pID=hp",“urlbase”:"/th?ID=OHR.ChurchRock_ZH-CN6926315999",“copyright”:“红石公园教堂岩附近的雷击,新墨西哥州 (© Tim Fitzharris/Minden Pictures)”,“copyrightlink”:“https://www.bing.com/search?q=%E7%BA%A2%E7%9F%B3%E5%85%AC%E5%9B%AD%E6%95%99%E5%A0%82&form=hpcapt&mkt=zh-cn”,“Title”:"",“quiz”:"/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20210124_ChurchRock%22&FORM=HPQUIZ",“wp”:true,“hsh”:“cdae6c57dbb4fe473dfd4f93b7870b8b”,“drk”:1,“top”:1,“bot”:1,“hs”:[]}],“tooltips”:{“loading”:“正在加载…”,“prevIoUs”:“上一个图像”,“next”:“下一个图像”,“walle”:“此图片不能下载用作壁纸。”,“walls”:“下载今日美图。仅限用作桌面壁纸。”}}

其中,url标签后的内容即为我们所需图片的地址,通过访问http://cn.bing.com+该地址就可以得到我们想要的图片,例如,上面得到的url为
/th?ID=OHR.ChurchRock_ZH-CN6926315999_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pID=hp
那我们访问

http://cn.bing.com/th?ID=OHR.ChurchRock_ZH-CN6926315999_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pID=hp

就可以得到我们想要的图片。

二、在androID上获取并显示图片

由于androID自身的限制,网络 *** 作只能在子线程中完成,这一点是我们写代码中特别需要注意的。因此我们要把访问API接口的代码写在子线程中。此外,在androID中,与UI有关的 *** 作只能在主线程或UI线程中完成,所以我们加载图片上要记得更换线程。

1.访问API接口

这里我们通过androID自带的httpurlconnection来访问,并将访问得到的Json返回文件存储到字符串response中。

private voID sendRequestWithhttpURLConnection() {        // 开启线程来发起网络请求        new Thread(new Runnable() {            @OverrIDe            public voID run() {                httpURLConnection connection = null;                BufferedReader reader = null;                try {                    URL url = new URL("https://cn.bing.com/HPImageArchive.aspx?format=Js&IDx=0&n=1");                    connection = (httpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(8000);                    connection.setReadTimeout(8000);                    inputStream in = connection.getinputStream();                    // 下面对获取到的输入流进行读取                    reader = new BufferedReader(new inputStreamReader(in));                    StringBuilder response = new StringBuilder();                    String line;                    while ((line = reader.readline()) != null) {                        response.append(line);                    }                    parseJsONWithJsONObject(response.toString());                   // showResponse(response.toString());                    //Ui线程                } catch (Exception e) {                    e.printstacktrace();                } finally {                    if (reader != null) {                        try {                            reader.close();                        } catch (IOException e) {                            e.printstacktrace();                        }                    }                    if (connection != null) {                        connection.disconnect();                    }                }            }        }).start();    }
2.Json的解析

这里我们直接通过androID自带的JsONArray和JsONObject来进行Json的解析,并将解析到的结果和http://cn.bing.com拼接起来,得到我们想要的图片的链接,并将其存储在字符串url1中。

private voID parseJsONWithJsONObject(String JsonData) {        try {           // JsONArray JsonArray = new JsONArray(JsonData);            JsONArray JsonArray = new JsONObject(JsonData).getJsONArray("images");            for (int i = 0; i < JsonArray.length(); i++) {                JsONObject JsonObject = JsonArray.getJsONObject(i);                String url = JsonObject.getString("url");                Log.d("MainActivity", "url is " + url);String url1="http://cn.bing.com"+url;                showResponse(url1);            }        } catch (Exception e) {            e.printstacktrace();        }    }
3.图片的加载

利用开源框架GlIDe进行图片的加载。
注意,图片的加载要写在UI线程中。

private voID showResponse(final String response) {        runOnUiThread(new Runnable() {            @OverrIDe            public voID run() {                // 在这里进行UI *** 作,将结果显示到界面上                GlIDe.with(MainActivity.this).load(response).into(img);              //  text.setText(response);                Log.i("123",response);            }        });    }
三、演示效果

四、源代码

1.xml

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:app="http://schemas.androID.com/apk/res-auto"    xmlns:tools="http://schemas.androID.com/tools"    androID:orIEntation="vertical"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    tools:context=".MainActivity"><ImageVIEw    androID:ID="@+ID/img"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"/></linearLayout>

这部分代码比较简单,就是线性布局中加了一个imagevIEw.

2.activity

public class MainActivity extends AppCompatActivity {    TextVIEw text;    ImageVIEw img;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        // text=findVIEwByID(R.ID.text);       img=findVIEwByID(R.ID.img);        sendRequestWithhttpURLConnection();    }    private voID sendRequestWithhttpURLConnection() {        // 开启线程来发起网络请求        new Thread(new Runnable() {            @OverrIDe            public voID run() {                httpURLConnection connection = null;                BufferedReader reader = null;                try {                    URL url = new URL("https://cn.bing.com/HPImageArchive.aspx?format=Js&IDx=0&n=1");                    connection = (httpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(8000);                    connection.setReadTimeout(8000);                    inputStream in = connection.getinputStream();                    // 下面对获取到的输入流进行读取                    reader = new BufferedReader(new inputStreamReader(in));                    StringBuilder response = new StringBuilder();                    String line;                    while ((line = reader.readline()) != null) {                        response.append(line);                    }                    parseJsONWithJsONObject(response.toString());                   // showResponse(response.toString());                    //Ui线程                } catch (Exception e) {                    e.printstacktrace();                } finally {                    if (reader != null) {                        try {                            reader.close();                        } catch (IOException e) {                            e.printstacktrace();                        }                    }                    if (connection != null) {                        connection.disconnect();                    }                }            }        }).start();    }    private voID showResponse(final String response) {        runOnUiThread(new Runnable() {            @OverrIDe            public voID run() {                // 在这里进行UI *** 作,将结果显示到界面上                GlIDe.with(MainActivity.this).load(response).into(img);              //  text.setText(response);                Log.i("123",response);            }        });    }    private voID parseJsONWithJsONObject(String JsonData) {        try {           // JsONArray JsonArray = new JsONArray(JsonData);            JsONArray JsonArray = new JsONObject(JsonData).getJsONArray("images");            for (int i = 0; i < JsonArray.length(); i++) {                JsONObject JsonObject = JsonArray.getJsONObject(i);                String url = JsonObject.getString("url");                Log.d("MainActivity", "url is " + url);String url1="http://cn.bing.com"+url;                showResponse(url1);            }        } catch (Exception e) {            e.printstacktrace();        }    }    }
总结

以上是内存溢出为你收集整理的Android实例之必应每日一图全部内容,希望文章能够帮你解决Android实例之必应每日一图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1050986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存