午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android基于開(kāi)源項(xiàng)目xutils3實(shí)現(xiàn)下載

瀏覽:20日期:2022-09-21 16:27:39

上一次自己寫(xiě)了一個(gè)多線程斷點(diǎn)續(xù)傳下載的demo,過(guò)于麻煩,bug超多,所以我學(xué)習(xí)使用xutils來(lái)完成此功能。

先將xutils依賴搭建好(上一篇博客已經(jīng)具體寫(xiě)了方法)

先看看效果圖:

Android基于開(kāi)源項(xiàng)目xutils3實(shí)現(xiàn)下載Android基于開(kāi)源項(xiàng)目xutils3實(shí)現(xiàn)下載

下面開(kāi)始代碼的邏輯:

在xutils3以前使用HttpUtils新建對(duì)象即可使用,3以后取消了HttpUtils,具體方法請(qǐng)看代碼。

首先創(chuàng)建布局activity_main.xml:

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' android:orientation='vertical' tools:context='.MainActivity'> <EditText android: android:layout_width='match_parent' android:layout_height='wrap_content' android:hint='請(qǐng)輸入下載路徑' android:text='http://10.173.29.234/gp.apk' /> <Button android:layout_width='wrap_content' android:layout_height='wrap_content' android:text='下載' android:onClick='click'/> <ProgressBar android: android:layout_width='match_parent' android:layout_height='wrap_content' /></LinearLayout>

然后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; //動(dòng)態(tài)獲取權(quán)限 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); //動(dòng)態(tài)獲取權(quán)限 verifyStoragePermissions(this); x.view().inject(this); et_path = findViewById(R.id.et_path); pb = findViewById(R.id.progressBar); } //點(diǎn)擊按鈕下載(斷點(diǎn)續(xù)傳) 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<File>() { @Override public void onWaiting() { } @Override public void onStarted() { } @Override public void onLoading(long total, long current, boolean isDownloading) {//totle代表總進(jìn)度,current代表當(dāng)前進(jìn)度pb.setMax((int) total);pb.setProgress((int) current);System.out.println('測(cè)試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('測(cè)試2'); } @Override public void onCancelled(CancelledException cex) {System.out.println('測(cè)試3'); } @Override public void onFinished() {System.out.println('測(cè)試4'); } }); } //動(dòng)態(tài)獲取權(quán)限 public static void verifyStoragePermissions(Activity activity) { try { //檢測(cè)是否有寫(xiě)的權(quán)限 int permission = ActivityCompat.checkSelfPermission(activity, 'android.permission.WRITE_EXTERNAL_STORAGE'); if (permission != PackageManager.PERMISSION_GRANTED) {// 沒(méi)有寫(xiě)的權(quán)限,去申請(qǐng)寫(xiě)的權(quán)限,會(huì)彈出對(duì)話框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>(){};<>中要寫(xiě)File,因?yàn)橄螺d的是一個(gè)文件,否則文件不會(huì)下載下來(lái)。

還要加上權(quán)限:

<uses-permission android:name='android.permission.INTERNET' /> <uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE' /> <uses-permission android:name='android.permission.READ_EXTERNAL_STORAGE' />

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 亚洲成人三级 | 国产成人自拍视频在线 | 欧美精品网 | 天天干夜夜艹 | 成年人免费在线观看视频网站 | 国产精品毛片一区二区三区 | 麻豆一区二区 | 中文字幕视频一区二区 | 精品一区二区三区在线观看视频 | 在线亚洲观看 | 黄色一级大片在线免费看国产一 | 麻豆一区二区三区在线观看 | 国产另类视频 | 久久影院中文字幕 | 污网站在线免费看 | 伊人啪啪网 | 四虎影视在线免费观看 | 日韩一级在线观看 | 欧美精品一级片 | 欧美黑吊大战白妞 | 国产成人三级在线观看视频 | 精品一二三四区 | 成人国产片女人爽到高潮 | 五月婷婷俺也去 | 国产精品麻豆免费版 | 91水蜜桃 | 91精品看片 | 国产精品成人免费 | 久久精品久久精品 | 久久在线看 | 久久天天操 | 国内精品一区二区三区 | 日韩不卡中文字幕 | 一区二区三区在线播放 | 精品久久久久久久久久久aⅴ | 欧美 日韩 国产 精品 | 亚洲男人的天堂在线 | 一卡二卡在线视频 | 成人免费影片 | chinesemature高潮| 日韩中文字幕av在线 |