OKHttp -网路下载传输资料
开新档案-
找到网站
https://square.github.io/okhttp/
implementation("com.squareup.okhttp3:okhttp:4.9.0")
准备贴这句在build.gradle里-
右上的sync Now要V
已载入资源库
再建立xml档
没有绑onClick所以要加 侦听器
APP要做按下按钮到指定网址(url)去 请求request(去敲门) 然後同意再反馈(Response)
要开始告知手机要网路-在manifests下权限-
<uses-permission android:name="android.permission.INTERNET"/>
再来到java档
流程:
按右键去复制图片网址
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後面才会跑出来
要加final才可以用
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. 解析结果
}
});
}
}
Java 语言使用 try…catch 的区块做为例外处理的机制,try 区块用来监控预先认定会出现例外的程序码,catch 区块则是用来放置当例外真的在 try 区块出现时
https://litotom.com/java-exception-handling-try-catch/
Bitmap处理图片
try {
左边都是结果 = 右边是来源
}
catch (){如果解析失败就Toast.}
下面要写完反红才会消失
模拟器要按两下才会动.手机不用
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 (上)
铁人赛来到第29天了! 既然应用程序都开发得差不多了,是时候来给Admin更多的权限了! 创建帐号连...
前面我们将了,如果通过 C# 从文本中获取内容,并进行一些简单的处理。今天我们来看看,怎么将获取的内...
传统编辑器的作用,就是把 HTML 转换为我们所见的网页的过度性产品 Classic Editor...
Class 是Ruby很重要的观念,要学习 Ruby 的一定要学会class & 物件。我们...
在使用seaborn画出炫丽的图片之前,先来做些基本的统计吧。 本文目的:叙述统计、推论统计、视觉直...