package com.tianze.androidnetworkokhttp;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;
import kotlin.Pair;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpDownloadFileActivity extends AppCompatActivity {
private static final String TAG = "OkHttpDownloadFileActiv";
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ok_http_download_file);
//权限请求
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},123);
}
}
public void downloadFile(View view) {
String url = "http://10.0.2.2:9102/download/15";
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(1000, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.get()
.url(url)
.build();
final Call call = client.newCall(request);
new Thread(new Runnable() {
@Override
public void run() {
InputStream inputStream = null;
FileOutputStream fos = null;
try {
Response execute = call.execute();
for (Pair<? extends String, ? extends String> header : execute.headers()) {
Log.e(TAG, header.getFirst()+" ==run: == "+header.getSecond());
}
String contentDisposition = execute.header("Content-disposition");
String fileName = contentDisposition.replace("attachment; filename=", "");
File outFile = new File(OkHttpDownloadFileActivity.this.getExternalFilesDir(Environment.DIRECTORY_PICTURES)+File.separator+fileName);
Log.e(TAG, "run: "+outFile.toString() );
if (!outFile.getParentFile().exists()){
outFile.mkdirs();
}
if (!outFile.exists()){
outFile.createNewFile();
}
fos = new FileOutputStream(outFile);
inputStream = execute.body().byteStream();
int len;
byte [] buffer = new byte[1024];
while ((len = inputStream.read(buffer,0,buffer.length))!=-1){
fos.write(buffer,0,len);
}
fos.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
根据okhtpp视频中的文件下载的步骤写的代码没有将代码下载下来,不知道是哪里出了问题。log上没有报错
2020-02-06 17:28:05.330 9460-9460/? I/idnetworkokhtt: Not late-enabling -Xcheck:jni (already on)
2020-02-06 17:28:05.582 9460-9460/? W/idnetworkokhtt: Unexpected CPU variant for X86 using defaults: x86
2020-02-06 17:28:06.252 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
2020-02-06 17:28:06.252 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
2020-02-06 17:28:06.252 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
2020-02-06 17:28:06.252 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
2020-02-06 17:28:06.252 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)
2020-02-06 17:28:06.381 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2020-02-06 17:28:06.382 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2020-02-06 17:28:06.392 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Landroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic; (light greylist, linking)
2020-02-06 17:28:06.443 9460-9460/com.tianze.androidnetworkokhttp D/OpenGLRenderer: Skia GL Pipeline
2020-02-06 17:28:06.501 9460-9534/com.tianze.androidnetworkokhttp D/HostConnection: HostConnection::get() New Host Connection established 0xdf81e4b0, tid 9534
2020-02-06 17:28:06.522 9460-9534/com.tianze.androidnetworkokhttp D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_3_0
2020-02-06 17:28:06.524 9460-9534/com.tianze.androidnetworkokhttp I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
2020-02-06 17:28:06.524 9460-9534/com.tianze.androidnetworkokhttp I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
2020-02-06 17:28:06.524 9460-9534/com.tianze.androidnetworkokhttp I/OpenGLRenderer: Initialized EGL, version 1.4
2020-02-06 17:28:06.524 9460-9534/com.tianze.androidnetworkokhttp D/OpenGLRenderer: Swap behavior 1
2020-02-06 17:28:06.524 9460-9534/com.tianze.androidnetworkokhttp W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2020-02-06 17:28:06.524 9460-9534/com.tianze.androidnetworkokhttp D/OpenGLRenderer: Swap behavior 0
2020-02-06 17:28:06.569 9460-9534/com.tianze.androidnetworkokhttp D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 0 0
2020-02-06 17:28:06.569 9460-9534/com.tianze.androidnetworkokhttp D/EGL_emulation: eglCreateContext: 0xdf805360: maj 3 min 0 rcv 3
2020-02-06 17:28:06.665 9460-9534/com.tianze.androidnetworkokhttp D/EGL_emulation: eglMakeCurrent: 0xdf805360: ver 3 0 (tinfo 0xdf8036f0)
2020-02-06 17:28:06.733 9460-9534/com.tianze.androidnetworkokhttp D/HostConnection: createUnique: call
2020-02-06 17:28:06.733 9460-9534/com.tianze.androidnetworkokhttp D/HostConnection: HostConnection::get() New Host Connection established 0xdf81e730, tid 9534
2020-02-06 17:28:06.736 9460-9534/com.tianze.androidnetworkokhttp D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_3_0
2020-02-06 17:28:06.736 9460-9534/com.tianze.androidnetworkokhttp E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1
2020-02-06 17:28:06.809 9460-9534/com.tianze.androidnetworkokhttp D/EGL_emulation: eglMakeCurrent: 0xdf805360: ver 3 0 (tinfo 0xdf8036f0)
2020-02-06 17:28:06.906 9460-9534/com.tianze.androidnetworkokhttp D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 3 2
2020-02-06 17:28:29.975 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V (light greylist, reflection)
2020-02-06 17:28:29.975 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V (light greylist, reflection)
2020-02-06 17:28:29.975 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B (light greylist, reflection)
2020-02-06 17:28:29.976 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V (light greylist, reflection)
2020-02-06 17:28:29.988 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (light greylist, reflection)
2020-02-06 17:28:29.988 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (light greylist, reflection)
2020-02-06 17:28:29.988 9460-9460/com.tianze.androidnetworkokhttp W/idnetworkokhtt: Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (light greylist, reflection)
2020-02-06 17:28:29.989 9460-9460/com.tianze.androidnetworkokhttp D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
2020-02-06 17:28:30.151 9460-9552/com.tianze.androidnetworkokhttp E/OkHttpDownloadFileActiv: Content-disposition ==run: == attachment; filename=15.png
2020-02-06 17:28:30.151 9460-9552/com.tianze.androidnetworkokhttp E/OkHttpDownloadFileActiv: Content-Type ==run: == application/x-msdownload
2020-02-06 17:28:30.151 9460-9552/com.tianze.androidnetworkokhttp E/OkHttpDownloadFileActiv: Content-Length ==run: == 187024
2020-02-06 17:28:30.151 9460-9552/com.tianze.androidnetworkokhttp E/OkHttpDownloadFileActiv: Date ==run: == Thu, 06 Feb 2020 09:28:30 GMT
2020-02-06 17:28:30.154 9460-9552/com.tianze.androidnetworkokhttp E/OkHttpDownloadFileActiv: run: /storage/emulated/0/Android/data/com.tianze.androidnetworkokhttp/files/Pictures/15.png
权限也给了,下载下来的时候也刷新了,但是就是图片!还有就是服务器会输出文件的长度,不知道是不是服务器的问题

您的每一个用心回答,都会让这个世界变得更美好一些!