gpt4 book ai didi

android - 使用 volley android 下载 Zip 文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:52 26 4
gpt4 key购买 nike

我想通过 volley 使用 get 调用下载一个 zip 文件。现在我可以使用以下方式下载文件:Download and Extract Zip File in Android .

我想改用 volley 库。我该怎么做?

最佳答案

这是我使用 volley 下载 zip 文件的方式:

package basavaraj.com.myapplicationtwo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.Volley;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements Response.Listener<byte[]>, ErrorListener {
EditText eText;
Button download, unzip;
boolean flag = false;
private static Random random = new Random(Calendar.getInstance().getTimeInMillis());
private ProgressDialog mProgressDialog;
String unzipLocation = Environment.getExternalStorageDirectory() + "/mycatalog";
String zipFile;

InputStreamVolleyRequest request;
int count;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

download = (Button) findViewById(R.id.download);
unzip = (Button) findViewById(R.id.unzip);
download.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*DownloadMapAsync mew = new DownloadMapAsync();
mew.execute("https://docs.google.com/uc?export=download&id=0BwxIiPT46CGHMWFTX0o4bzMzYU0");*/
String mUrl="https://docs.google.com/uc?export=download&id=0BwxIiPT46CGHMWFTX0o4bzMzYU0";
request = new InputStreamVolleyRequest(Request.Method.GET, mUrl, MainActivity.this, MainActivity.this, null);
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(),
new HurlStack());
mRequestQueue.add(request);
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Downloading Zip File..");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
});
unzip.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*if (flag) {*/
try {
unzip();
} catch (IOException e) {
e.printStackTrace();
}
}

});

}
@Override
public void onResponse(byte[] response) {
HashMap<String, Object> map = new HashMap<String, Object>();
try {
if (response!=null) {

//Read file name from headers
String content =request.responseHeaders.get("Content-Disposition")
.toString();
StringTokenizer st = new StringTokenizer(content, "=");
/*String arrTag = st.toString();

String filename = arrTag;*/
String filename = content.split("'")[2];
filename = filename.replace(":", ".");
Log.d("DEBUG::RESUME FILE NAME", filename);

try{
long lenghtOfFile = response.length;

//covert reponse to input stream
InputStream input = new ByteArrayInputStream(response);
File path = Environment.getExternalStorageDirectory();
File file = new File(path, filename);
zipFile = file.toString();
map.put("resume_path", file.toString());
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file));
byte data[] = new byte[1024];

long total = 0;

while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}

output.flush();
output.close();
input.close();
mProgressDialog.dismiss();
}catch(IOException e){
e.printStackTrace();

}
}
} catch (Exception e) {
mProgressDialog.dismiss();
// TODO Auto-generated catch block
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE");
e.printStackTrace();
}
}

@Override
public void onErrorResponse(VolleyError error) {
mProgressDialog.dismiss();
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE. ERROR:: "+error.getMessage());
}

public void unzip() throws IOException {
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Please Wait...Extracting zip file ... ");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
new UnZipTask().execute(zipFile, unzipLocation);
}


private class UnZipTask extends AsyncTask<String, Void, Boolean> {
@SuppressWarnings("rawtypes")
@Override
protected Boolean doInBackground(String... params) {
String filePath = params[0];
String destinationPath = params[1];

File archive = new File(filePath);
try {


ZipFile zipfile = new ZipFile(archive);
for (Enumeration e = zipfile.entries();
e.hasMoreElements(); ) {
ZipEntry entry = (ZipEntry) e.nextElement();
unzipEntry(zipfile, entry, destinationPath);
}


UnzipUtil d = new UnzipUtil(zipFile, unzipLocation);
d.unzip();

} catch (Exception e) {

return false;
}

return true;
}

@Override
protected void onPostExecute(Boolean result) {
mProgressDialog.dismiss();

}


private void unzipEntry(ZipFile zipfile, ZipEntry entry,
String outputDir) throws IOException {

if (entry.isDirectory()) {
createDir(new File(outputDir, entry.getName()));
return;
}

File outputFile = new File(outputDir, entry.getName());
if (!outputFile.getParentFile().exists()) {
createDir(outputFile.getParentFile());
}

// Log.v("", "Extracting: " + entry);
BufferedInputStream inputStream = new BufferedInputStream(zipfile.getInputStream(entry));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));

try {

} finally {
outputStream.flush();
outputStream.close();
inputStream.close();


}
}

private void createDir(File dir) {
if (dir.exists()) {
return;
}
if (!dir.mkdirs()) {
throw new RuntimeException("Can not create dir " + dir);
}
}
}


}



UnzipUtil.java


package basavaraj.com.myapplicationtwo;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;


public class UnzipUtil {
private String _zipFile;
private String _location;

public UnzipUtil(String zipFile, String location) {
_zipFile = zipFile;
_location = location;

_dirChecker("");
}

public void unzip() {
try {
FileInputStream fin = new FileInputStream(_zipFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
Log.v("Decompress", "Unzipping " + ze.getName());

if(ze.isDirectory()) {
_dirChecker(ze.getName());
} else {
FileOutputStream fout = new FileOutputStream(_location + ze.getName());
// for (int c = zin.read(); c != -1; c = zin.read()) {
// fout.write(c);


byte[] buffer = new byte[8192];
int len;
while ((len = zin.read(buffer)) != -1) {
fout.write(buffer, 0, len);
}
fout.close();

// }

zin.closeEntry();
// fout.close();
}

}
zin.close();
} catch(Exception e) {
Log.e("Decompress", "unzip", e);
}

}

private void _dirChecker(String dir) {
File f = new File(_location + dir);

if(f.isDirectory()) {
f.mkdirs();
}
}
}



InputStreamVolleyRequest.java


package basavaraj.com.myapplicationtwo;

/**
* Created by VISHAL on 4/5/2017.
*/

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;

import java.util.HashMap;
import java.util.Map;


public class InputStreamVolleyRequest extends Request<byte[]> {
private final Response.Listener<byte[]> mListener;
private Map<String, String> mParams;
//create a static map for directly accessing headers
public Map<String, String> responseHeaders;

public InputStreamVolleyRequest(int post, String mUrl, Response.Listener<byte[]> listener,
Response.ErrorListener errorListener, HashMap<String, String> params) {
// TODO Auto-generated constructor stub

super(post, mUrl, errorListener);
// this request would never use cache.
setShouldCache(false);
mListener = listener;
mParams = params;
}

@Override
protected Map<String, String> getParams()
throws com.android.volley.AuthFailureError {
return mParams;
}

;


@Override
protected void deliverResponse(byte[] response) {
mListener.onResponse(response);
}

@Override
protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {

//Initialise local responseHeaders map with response headers received
responseHeaders = response.headers;

//Pass the response data here
return Response.success(response.data, HttpHeaderParser.parseCacheHeaders(response));
}
}

关于android - 使用 volley android 下载 Zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com