当前位置: 首页 > news >正文

Android Studio的笔记--HttpURLConnection使用GET下载zip文件

HttpURLConnection使用GET下载zip文件

  • http get下载zip文件
    • MainActivity.java
    • AndroidMainfest.xml
    • activity_main.xml
    • log

http get下载zip文件

MainActivity.java

用HttpURLConnection GET方法进行需注意:
1、Android 9及以上版本需要设置这个,否则会有警告
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
2、清单中要申请网络权限写入权限
< uses-permission android:name=“android.permission.INTERNET” />
< uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE” />
3、要在application中添加android:usesCleartextTraffic=“true”。否则会有警告,好像加这个有风险,没有细研究
4、关于下载的位置Environment.getExternalStorageDirectory()的路径在/storage/emulated/0
5、关于下载的测试地址http://nginx.org/download/nginx-1.23.4.zip
6、关于下载的两种方式

package com.lxh.romupgrade;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {Button bt_post;Button bt_post2;Context mcontext;private static final String TAG = "MainActivity3 lxh";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt_post = findViewById(R.id.bt_post);bt_post2 = findViewById(R.id.bt_post2);mcontext = MainActivity.this;bt_post.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.i(TAG, "onClick");download_2();}});bt_post2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.i(TAG, "onClick");// Android 9及以上版本需要设置这个,否则会有警告if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);}download_3();}});}private void download_2() {new DownloadZipFileTask().execute();}public static void download_3() {Log.i(TAG, "download_3");String url = "http://nginx.org/download/nginx-1.23.4.zip";FileOutputStream fos = null;InputStream in = null;try {URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.setRequestMethod("GET");int responseCode = conn.getResponseCode();Log.i(TAG, "responseCode=" + responseCode);if (responseCode == HttpURLConnection.HTTP_OK) {fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/file3.zip");byte[] buffer = new byte[1024];int len;while ((len = conn.getInputStream().read(buffer)) != -1) {fos.write(buffer, 0, len);}fos.close();conn.getInputStream().close();Log.i(TAG, "download ok");} else {Log.i(TAG, "Handle error case here");}} catch (Exception e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (Exception e) {e.printStackTrace();}}if (in != null) {try {in.close();} catch (Exception e) {e.printStackTrace();}}}}
}
package com.lxh.romupgrade;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;/*** create by lxh on 2023/10/10 Time:20:21* tip:HTTP 下载*/
public class DownloadZipFileTask extends AsyncTask<Void, Integer, Void> {@Overrideprotected Void doInBackground(Void... params) {Log.i("lxh", "doInBackground");try {URL url = new URL("http://nginx.org/download/nginx-1.23.4.zip");HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();int fileSize = connection.getContentLength();InputStream inputStream = connection.getInputStream();FileOutputStream outputStream = new FileOutputStream(Environment.getExternalStorageDirectory() + "/file2.zip");byte[] buffer = new byte[4096];int bytesRead;int totalBytesRead = 0;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);totalBytesRead += bytesRead;int progress = (int) (totalBytesRead * 100 / fileSize);publishProgress(progress);}Log.i("lxh", "download ok");outputStream.close();inputStream.close();connection.disconnect();} catch (IOException e) {e.printStackTrace();}return null;}
}

AndroidMainfest.xml

需要在清单添加

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.lxh.romupgrade"><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:usesCleartextTraffic="true"android:theme="@style/Theme.Romupgrade"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

activity_main.xml

布局如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/bt_post"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="POST" /><Buttonandroid:id="@+id/bt_post2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="POST2" />
</LinearLayout>

log

点击按钮回显如下

I/MainActivity3 lxh: onClick
I/lxh: doInBackground
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
I/lxh: download okI/MainActivity3 lxh: onClick
I/MainActivity3 lxh: download_3
I/MainActivity3 lxh: responseCode=200
I/MainActivity3 lxh: download ok

待补充
欢迎指错,一起学习

http://www.lryc.cn/news/193484.html

相关文章:

  • phantom3D模体
  • 贪心算法解决批量开票限额的问题
  • Unity后台登录/获取数据——BestHTTP的使用Get/Post
  • 【Windows日志】记录系统事件的日志
  • 物联网开发学习笔记——目录索引
  • Prometheus:优秀和强大的监控报警工具
  • Appium
  • 自动驾驶学习笔记(五)——绕行距离调试
  • 【Android】VirtualDisplay创建流程及原理
  • Linux服务器快速搭建pytorch
  • 声音克隆,定制自己的声音,使用最新版Bert-VITS2的云端训练+推理记录
  • LeetCode讲解篇之198. 打家劫舍
  • 【下载共享文件】Java基于SMB协议 + JCIFS依赖下载Windows共享文件(亲测可用)
  • 【评分卡实现】应用Python中的toad.ScoreCard函数实现评分卡
  • 【数据结构】双链表的相关操作(声明结构体成员、初始化、判空、增、删、查)
  • 解析找不到msvcp140.dll的5个解决方法,快速修复dll丢失问题
  • 代码管理工具 gitlab实战应用
  • 小谈设计模式(27)—享元模式
  • 网络代理技术:隐私保护与安全加固的利器
  • orgChart.js组织架构图
  • 华纳云:SQL Server怎么批量导入和导出数据
  • 深入了解桶排序:原理、性能分析与 Java 实现
  • 微店店铺所有商品数据接口,微店整店商品数据接口,微店店铺商品数据接口,微店API接口
  • SSL证书能选择免费的吗?
  • 苹果macOS电脑版 植物大战僵尸游戏
  • 【每日一题】ABC311G - One More Grid Task | 单调栈 | 简单
  • 第五十六章 学习常用技能 - 执行 SQL 查询
  • 2023年起重信号司索工(建筑特殊工种)证考试题库及起重信号司索工(建筑特殊工种)试题解析
  • 《华为战略管理法:DSTE实战体系》作者谢宁老师受邀为某电力上市集团提供两天的《成功的产品管理及产品经理》内训。
  • finalshell连接虚拟机中的ubuntu