package com.ljp.downdemo.utils;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.franmontiel.persistentcookiejar.ClearableCookieJar;
import com.franmontiel.persistentcookiejar.PersistentCookieJar;
import com.franmontiel.persistentcookiejar.cache.SetCookieCache;
import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* 作者:admin
* 时间:2018/5/23 0023
* 用途:
*/
public class UtilsOKHttp {
private static OkHttpClient client;
private volatile static UtilsOKHttp manager;
private Handler handler;
private UtilsOKHttp(Context context) {
ClearableCookieJar cookieJar =
new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
client = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
handler = new Handler(Looper.getMainLooper());
}
public static UtilsOKHttp getInstance(Context context) {
if (manager == null) {
manager = new UtilsOKHttp(context);
}
return manager;
}
public void get(String url, final OKCallback callBack) {
get(url, null, callBack);
}
public void get(String url, HashMap<String, String> params, final OKCallback callBack) {
if (params != null && params.size() > 0) {
url = makeGetUrl(url, params);
}
final Request request = new Request.Builder().url(url).get().build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
onFailJsonStringMethod("请求失败", callBack);
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if (response != null && response.isSuccessful()) {
onSuccessJsonStringMethod(response.body().string(), callBack);
} else {
onFailJsonStringMethod("请求失败", callBack);
}
}
});
}
/**
* 下载地址
*
* @param url
* @param savePath
* @throws Exception
*/
public void downFile(final String url, final String savePath, final OKCallback okCallback) throws Exception {
if (url != null && savePath != null) {
if (new File(savePath).exists()) {
Request request = new Request.Builder()
.url(url)
.addHeader("Connection", "close")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
onFailJsonStringMethod(e.getMessage(), okCallback);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream is = null;
byte[] buf = new byte[2048];
int len = 0;
FileOutputStream fos = null;
try {
is = response.body().byteStream();
long total = response.body().contentLength();
File file = new File(savePath, url.substring(url.lastIndexOf("/") + 1));
fos = new FileOutputStream(file);
long sum = 0;
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
sum += len;
int progress = (int) (sum * 1.0f / total * 100);
Log.e("aaa", "download progress : " + progress);
onProcessMethod(progress, okCallback);
}
fos.flush();
fos.close();
//成功以后返回file的地址
onSuccessJsonStringMethod(file.getAbsolutePath(), okCallback);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} else {
throw new FileNotFoundException("找不到存放地址");
}
} else {
throw new NullPointerException("参数为空");
}
}
/**
* post 模拟表单提交
*/
public void post(String url, HashMap<String, String> params, final OKCallback callBack) {
FormBody.Builder form_builder = new FormBody.Builder();
//表单对象,包含以input开始的对象,以html表单为主
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
form_builder.add(entry.getKey(), entry.getValue());
}
}
RequestBody request_body = form_builder.build();
Request request = new Request.Builder().url(url).post(request_body).build();
//采用post方式提交
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
onFailJsonStringMethod("请求失败", callBack);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
onSuccessJsonStringMethod(response.body().string(), callBack);
} else {
onFailJsonStringMethod("请求失败", callBack);
}
}
});
}
/**
* post请求上传文件....包括图片....流的形式传任意文件...
* 参数1 url
* file表示上传的文件
* fileName....文件的名字,,例如aaa.jpg
* params ....传递除了file文件 其他的参数放到map集合
*/
public static void uploadBase64Img(String url, String img, String fileName, Map<String, String> params, Callback callback) {
//创建OkHttpClient请求对象
//MultipartBody多功能的请求实体对象,,,formBody只能传表单形式的数据
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MultipartBody.FORM);
builder.addPart(
Headers.of("Content-Disposition", "form-data; name=\"fileBytes\""),
RequestBody.create(MediaType.parse("text/plain;charset=ISO-8859-1"), img))
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"serviceType\""),
RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), fileName + ""));
//参数
if (params != null) {
for (String key : params.keySet()) {
builder.addFormDataPart(key, params.get(key));
没有合适的资源?快使用搜索试试~ 我知道了~
DownDemo.zip
共120个文件
xml:65个
png:19个
bin:8个
需积分: 5 50 下载量 116 浏览量
2020-06-24
14:53:20
上传
评论 1
收藏 359KB ZIP 举报
温馨提示
该demo是模仿了从服务器下载并更新软件,该例子用到了文件下载,android6.0以上版本动态申请权限,android10.0的文件适配
资源推荐
资源详情
资源评论
收起资源包目录
DownDemo.zip (120个子文件)
gradlew.bat 2KB
executionHistory.bin 869KB
jarAnalysis.bin 91KB
classAnalysis.bin 79KB
fileHashes.bin 67KB
taskHistory.bin 27KB
outputFiles.bin 20KB
resourceHashesCache.bin 18KB
last-build.bin 1B
.gitignore 222B
.gitignore 6B
build.gradle 1KB
build.gradle 649B
settings.gradle 45B
gradlew 5KB
app.iml 13KB
DownDemo.iml 987B
UtilsOKHttp.java 12KB
FileUtils.java 11KB
MainActivity.java 6KB
PermissionUtils.java 2KB
ExampleInstrumentedTest.java 771B
ExampleUnitTest.java 393B
buildOutputCleanup.lock 17B
checksums.lock 17B
fileHashes.lock 17B
fileContent.lock 17B
executionHistory.lock 17B
javaCompile.lock 17B
ic_launcher_round.png 16KB
ic_launcher_round.png 12KB
ic_launcher.png 10KB
ic_launcher.png 8KB
ic_launcher_round.png 7KB
ic_launcher_round.png 5KB
ic_launcher.png 5KB
ic_launcher.png 4KB
ic_launcher_round.png 3KB
ic_launcher.png 3KB
i05.png 2KB
i06.png 2KB
i00.png 2KB
i01.png 2KB
i04.png 2KB
i02.png 2KB
i03.png 2KB
background_1.png 1KB
bar_1.png 984B
proguard-rules.pro 770B
gradle.properties 1KB
local.properties 455B
cache.properties 53B
gc.properties 0B
gc.properties 0B
build_file_checksums.ser 545B
dbnavigator.xml 23KB
workspace.xml 10KB
ic_launcher_background.xml 6KB
Project.xml 4KB
ic_launcher_foreground.xml 2KB
AndroidManifest.xml 1KB
jarRepositories.xml 1KB
activity_main.xml 1KB
layout_dialog.xml 1KB
Gradle__androidx_test_espresso_espresso_idling_resource_3_2_0_aar.xml 976B
Gradle__com_github_franmontiel_PersistentCookieJar_v1_0_1_aar.xml 966B
Gradle__com_yanzhikaijky_PictureProgressbar_1_2_0_aar.xml 934B
Gradle__com_yanzhenjie_permission_2_0_0_rc11_aar.xml 907B
Gradle__androidx_test_espresso_espresso_core_3_2_0_aar.xml 899B
Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml 872B
Gradle__androidx_appcompat_appcompat_1_1_0_aar.xml 848B
Gradle__androidx_test_ext_junit_1_1_1_aar.xml 846B
Gradle__androidx_fragment_fragment_1_1_0_aar.xml 840B
Gradle__androidx_test_monitor_1_2_0_aar.xml 830B
Gradle__androidx_test_core_1_2_0_aar.xml 827B
Gradle__androidx_test_runner_1_2_0_aar.xml 823B
gradle.xml 817B
Gradle__androidx_core_core_1_1_0_aar.xml 808B
Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml 793B
Gradle__androidx_annotation_annotation_1_1_0_jar.xml 765B
Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml 764B
Gradle__com_squareup_okhttp3_okhttp_3_10_0_jar.xml 747B
Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml 744B
Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml 744B
Gradle__com_squareup_javawriter_2_1_1_jar.xml 737B
Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml 734B
Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml 734B
Gradle__androidx_appcompat_appcompat_resources_1_1_0_aar.xml 732B
Gradle__javax_inject_javax_inject_1_jar.xml 723B
Gradle__com_squareup_okio_okio_1_14_0_jar.xml 722B
Gradle__androidx_lifecycle_lifecycle_viewmodel_2_1_0_aar.xml 714B
Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml 709B
Gradle__androidx_lifecycle_lifecycle_runtime_2_1_0_aar.xml 704B
Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml 699B
Gradle__net_sf_kxml_kxml2_2_3_0_jar.xml 698B
Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml 692B
Gradle__androidx_savedstate_savedstate_1_0_0_aar.xml 689B
Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml 685B
Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml 679B
Gradle__androidx_activity_activity_1_0_0_aar.xml 675B
共 120 条
- 1
- 2
资源评论
- shenbin12021-09-03标题党,骗积分的gou,nimamaipi的。
ljp345775
- 粉丝: 54
- 资源: 43
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功