第21天~OKHttp

OKHttp -网路下载传输资料

开新档案-

https://ithelp.ithome.com.tw/upload/images/20220204/20119035zEkraZYrgj.png

找到网站
https://square.github.io/okhttp/

https://ithelp.ithome.com.tw/upload/images/20220204/20119035C0wF0abLpF.png

implementation("com.squareup.okhttp3:okhttp:4.9.0")

准备贴这句在build.gradle里-

https://ithelp.ithome.com.tw/upload/images/20220204/20119035HWbP84DNcJ.png

右上的sync Now要V

已载入资源库


再建立xml档
没有绑onClick所以要加 侦听器

APP要做按下按钮到指定网址(url)去 请求request(去敲门) 然後同意再反馈(Response)

要开始告知手机要网路-在manifests下权限-

https://ithelp.ithome.com.tw/upload/images/20220204/20119035bWyN7Z3Hk6.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035eIOGtZuefB.png

  <uses-permission android:name="android.permission.INTERNET"/>

再来到java档

https://ithelp.ithome.com.tw/upload/images/20220204/2011903579h6PkReYF.png

流程:

  1. 建立 OKHttpClient物件
  2. 建立 Request物件
  3. 由1.去newCall()->Call物件
  4. 执行

按右键去复制图片网址

https://ithelp.ithome.com.tw/upload/images/20220204/2011903593dIJNTJiv.png

贴上Code-https://auctions.c.yimg.jp/images.auctions.yahoo.co.jp/image/dr000/auc0201/users/6c8440bda4cfe4de76380d0902f5987a347e5b5b/i-img640x480-1610424520tzxmib9478.jpg

package com.huang.myokhttp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    //宣告

    Button loadImg;
    ImageView img;
    String url ="https://auctions.c.yimg.jp/images.auctions.yahoo.co.jp/image/dr000/auc0201/users/6c8440bda4cfe4de76380d0902f5987a347e5b5b/i-img640x480-1610424520tzxmib9478.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

图片建议.jpg 不要找bmp


开始初始化-
Executor管理器
Executors管理器的工具.要加s後面才会跑出来

https://ithelp.ithome.com.tw/upload/images/20220204/2011903541Ml6QACpD.png

要加final才可以用

https://ithelp.ithome.com.tw/upload/images/20220204/20119035Bj5rErwRfE.png

package com.huang.myokhttp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import okhttp3.OkHttpClient;
import okhttp3.Request;

public class MainActivity extends AppCompatActivity {

    //宣告

    Button loadImg;
    ImageView img;
    String url ="https://auctions.c.yimg.jp/images.auctions.yahoo.co.jp/image/dr000/auc0201/users/6c8440bda4cfe4de76380d0902f5987a347e5b5b/i-img640x480-1610424520tzxmib9478.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //进行初始化
        img =findViewById(R.id.img);
        loadImg = findViewById(R.id.loadimg);

        //建立Thread执行绪 / ExecutorService管理器
        final ExecutorService service = Executors.newSingleThreadExecutor();

        loadImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //1. 建立 OKHttpClient物件
                final OkHttpClient client = new OkHttpClient();

                //2. 建立 Request物件.敲门的动作.要找okhttp3
                final Request request = new Request.Builder().url(url).build();

                //3. 执行Request.写内部类.送工作出去
                service.submit();

                //4. 解析结果
            }
        });
    }
}

https://ithelp.ithome.com.tw/upload/images/20220204/20119035I6NP6HpSUn.png


Java 语言使用 try…catch 的区块做为例外处理的机制,try 区块用来监控预先认定会出现例外的程序码,catch 区块则是用来放置当例外真的在 try 区块出现时

https://litotom.com/java-exception-handling-try-catch/
Bitmap处理图片

try {
左边都是结果 = 右边是来源
                        }
                        catch (){如果解析失败就Toast.}

下面要写完反红才会消失

https://ithelp.ithome.com.tw/upload/images/20220204/20119035yLpS7aJM3W.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035z1pA57ntrK.png

模拟器要按两下才会动.手机不用

https://ithelp.ithome.com.tw/upload/images/20220204/20119035MwEQY2vlW2.png


package com.huang.myokhttp;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    //宣告

    Button loadImg;
    ImageView img;
    String url ="https://auctions.c.yimg.jp/images.auctions.yahoo.co.jp/image/dr000/auc0201/users/6c8440bda4cfe4de76380d0902f5987a347e5b5b/i-img640x480-1610424520tzxmib9478.jpg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //进行初始化
        img =findViewById(R.id.img);
        loadImg = findViewById(R.id.loadimg);

        //建立Thread执行绪 / ExecutorService管理器
        final ExecutorService service = Executors.newSingleThreadExecutor();

        loadImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //1. 建立 OKHttpClient物件
                final OkHttpClient client = new OkHttpClient();

                //2. 建立 Request物件.敲门的动作.要找okhttp3
                final Request request = new Request.Builder().url(url).build();

                //3. 执行Request.写内部类.送工作内容出去
                service.submit(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            //OKHttpClient物件包装请求并返回执行结果Response
                            Response response = client.newCall(request).execute();
                            //从执行结果中取得二进位资料
                            InputStream is = response.body().byteStream();
                            //4.解析二进位资料变成图片
                            Bitmap bm = BitmapFactory.decodeStream(is);
                            //放入元件
                            img.setImageBitmap(bm);
                        }
                        catch (IOException e){
                            Toast.makeText(MainActivity.this,"Fail",Toast.LENGTH_SHORT).show();
                        }
                    }
                });

            }
        });
    }
}


现在真的极度爱困~
但是我还是要要来介绍Android的使用注意事项:
(我写的都是真的~不然回去问老师0.0)

1.安卓NAME有EXAMPLE就不能上传-命名规则(这个跟我们在JAVA编辑器的命名很不相同.因为如果不命名.编辑器就会自带EXAMPLE.在Android是不可以的喔~)
2.初始化=跑进度条...要让他跑完(要跑得动Android的编辑器真的要比较好的电脑~然後也要网速够..还要不当机..像昨天FB/IG大当机就一片哀嚎~还有如果是没有关机习惯的人~记得睡前要存档一下~不然有时电脑会更新就帮您关~就要重来一次啦):
3.jdk的jre是偏向开发的部分.要注意是否有跑出来
4.偏好设定settings(如果是英文不好就是看到记起来):Editor-General-要设定chang font去配合按ctrl+滚轮=变字大小(这里因为我比较穷就是使用windows如果您是使用IOS快速键就不同喔~)
5.version3.4.2版本可以用..只是会有一个功能All Attributs 旧版改字+颜色在下面跟version4.1有差(其实版本的不同就是有些地方的位置不同..还是可以做出东西~)
6.用xml+res去展现跟画面有关
7.Tools里面有firebase(不用钱的云端资料库..指使有限制一个人可以使用的专案数)
8.app的manifests是组态档-app 入口
9.res表示资源:图/layout/字串string/color/style/动画/menu
10.Gradle Scripts:程序库管理/套件

真的非常抱歉~目前的体力只能纯文字...
我预计到第30天会介绍如何上架商店喔~
希望...可以让我继续有铁人发文的机会~拜托拜托


<<:  Unity与Photon的新手相遇旅途 | Day21-Photon Lobby UI (上)

>>:  企划实现(21)

使用者帐号在Mendix要怎麽管理?

铁人赛来到第29天了! 既然应用程序都开发得差不多了,是时候来给Admin更多的权限了! 创建帐号连...

C#入门之文本处理(下)

前面我们将了,如果通过 C# 从文本中获取内容,并进行一些简单的处理。今天我们来看看,怎么将获取的内...

02 | WordPress 编辑器的进化起源,认识「传统编辑器」

传统编辑器的作用,就是把 HTML 转换为我们所见的网页的过度性产品 Classic Editor...

Day11. 活用 Ruby Class

Class 是Ruby很重要的观念,要学习 Ruby 的一定要学会class & 物件。我们...

资料视觉化 推论统计先 python ANOVA seaborn

在使用seaborn画出炫丽的图片之前,先来做些基本的统计吧。 本文目的:叙述统计、推论统计、视觉直...