android xutils3 jar,android xutils3 Android基于开源项目xutils3实现下载
上一次自己写了一个多线程断点续传下载的demo,过于麻烦,bug超多,所以我学习使用xutils来完成此功能。
先将xutils依赖搭建好(上一篇博客已经具体写了方法)
先看看效果图:
下面开始代码的逻辑:
在xutils3以前使用HttpUtils新建对象即可使用,3以后取消了HttpUtils,具体方法请看代码。
首先创建布局activity_main.xml:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
android:id="@+id/et_path"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入下载路径"
android:text="http://10.173.29.234/gp.apk" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下载"
android:onClick="click"/>
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
然后MainActivity.java:
import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private EditText et_path;
private ProgressBar pb;
//动态获取权限
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
private String fileName;
private String appName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//动态获取权限
verifyStoragePermissions(this);
x.view().inject(this);
et_path = findViewById(R.id.et_path);
pb = findViewById(R.id.progressBar);
}
//点击按钮下载(断点续传)
public void click(View view) {
//拿到路径
String path = et_path.getText().toString().trim();
fileName = getFileName(path);
RequestParams params = new RequestParams(path);
params.setSaveFilePath(fileName);
params.setAutoRename(true);
x.http().get(params, new Callback.ProgressCallback() {
@Override
public void onWaiting() {
}
@Override
public void onStarted() {
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
//totle代表总进度,current代表当前进度
pb.setMax((int) total);
pb.setProgress((int) current);
System.out.println("测试1");
}
@Override
public void onSuccess(File result) {
System.out.println("下载完成");
Toast.makeText(getApplicationContext(), "下载成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
System.out.println("测试2");
}
@Override
public void onCancelled(CancelledException cex) {
System.out.println("测试3");
}
@Override
public void onFinished() {
System.out.println("测试4");
}
});
}
//动态获取权限
public static void verifyStoragePermissions(Activity activity) {
try {
//检测是否有写的权限
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有写的权限,去申请写的权限,会弹出对话框
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//获取文件名-->"http://10.173.29.234/test.exe"
public String getFileName(String path) {
int start = path.lastIndexOf("/") + 1;
appName = path.substring(start);
// String fileName = Environment.getExternalStorageDirectory().getPath()+"/"+subString;
String fileName = "/sdcard/file/"+ appName;
return fileName;
}
}
第53行注意x.http().get(params, new Callback.ProgressCallback(){};<>中要写File,因为下载的是一个文件,否则文件不会下载下来。
还要加上权限:
相关文章
android xutils3 jar,android xutils3 Android基于开源项目xutils3实现下载相关推荐
- Android消息通信之无所不能的第三方开源项目EventBus
Android消息通信之无所不能的第三方开源项目EventBus 在Android开发中,消息通信在开发过程中是比较重要但比较略微繁琐的过程,比如,Activity与Fragment之间的消息通 ...
- Android x86开源项目虚拟机镜像下载(VM/Vbox)
Android x86 开源项目可以让我们在虚拟机中直接运行Android系统,这里的x86指的是平台架构非32位版. 如果你曾经查找过VMware 虚拟机安装 Android 的教程,应该了解直接安 ...
- 改:如何基于开源项目做二次开发
改:如何基于开源项目做二次开发 [保持纯洁,加以包装] 当我们发现开源项目有的地方不满足我们的需求的时候,自然会有一种去改改的冲动,但是怎么改是个大学问.一种方式是投入几个人从内到外全部改一遍,将其 ...
- Android开源项目源码下载(不断更新中)
原文地址:http://www.cnblogs.com/salam/archive/2010/10/26/1861779.html 最近我搜集了一些提供源码的开源项目,在这里发布出来供大家学习使用. ...
- android自定义视频列表,Github最火开源项目-高仿今日头条视频列表功能
主要特点视频全屏播放和浮层小窗播放 可以完全自定义UI 能在ListView.ViewPager和ListView.ViewPager和Fragment等多重嵌套模式下全屏工作 手势修改进度和音量 视 ...
- 手把手教大家在自己的Windows电脑上搭建一个视频电话系统(基于开源项目FreeSwitch+Linphone)
目前可以做视频电话的流媒体开源项目有很多,那么今天我就手把手教大家(基于FreeSwitch+Linphone)搭建一个免费的开源的能在局域网中使用的视频电话系统,部署与配置都非常的简单,而且点对点的 ...
- 基于开源项目kkFileView打造文件预览
1.需求 一般管理系统都有文件上传功能,基于此一般会诞生一个需求:用户需要在线预览自己上传的文件.需求很合理,但是没那么好做,原因在于浏览器默认支持图片.pdf等少量格式预览,而实际情况是你并不能要求 ...
- Android acra 日志上报,基于开源项目acra实现的定制化Android crash上报库及后台系统...
出发点: 开源的acra crash上报库( http://code.google.com/p/acra/)的缺点有: 1. crash上报到google doc里的话,由于被墙了,所以看不到数据. ...
- Android基于开源项目搭建自己的技术堆栈
一.app的整体架构 从较高的层次讲,一个APP的整体架构可以分为两层,即应用层和基础框架层. 1.应用层专注于行业领域的实现,如金融.支付.地图.社交等,它直接面向用户,是用户对产品的第一层感知. ...
最新文章
- 怎么才能转入大数据领域 ,成为一名合格的大数据分析师...
- Alteral Max 10 FPGA 优点
- c语言判断二叉树是不是二叉排序树_C语言:数据结构-树表的查找
- 自定义文件系统下的磁盘访问次数计算
- JVM第二节:JVM 中的对象
- plsql 排序_在PLSQL中怎么能取到表中按ID降序排列的前十条记录???
- android 测试js,Android 全自动js脚本测试 Appium教程——appium环境搭建(一)
- eclipse 64位 免安装_超详细:64位Linux下安装PS模拟器ePSxe
- php dingo和jwt,Laravel5.5+dingo+JWT 开发后台 API
- deepin efi 启动u盘_deepin启动引导修复教程
- 「分布式系统之美」知乎圆桌精选大放送第二期|不要放过任何你感兴趣的话题
- python网易云热歌榜歌曲信息爬取(iframe框架内数据爬取,src为空)
- 机器学习入门系列05,Classification: Probabilistic Generative Model(分类:概率生成模型)
- 数据库关键字(保留字)
- FSM-Golang
- 视频教程:Java七大外企经典面试套路之基础篇
- 竞价排名和php是什么,竞价排名优缺点详解-金瑞帆高端建站
- 离散数学学习笔记——第八讲——图论基础(7.1图的基本概念和性质——4.子图和补图)
- 6-7 判断满足条件的三位数 (15 分)
- 重采样 resample