Copyright (c) 2014 FeedHenry Ltd, All Rights Reserved.
Please refer to your contract with FeedHenry for the software license agreement.
If you do not have a contract, you do not have a license to use...
If you think the Android project fh-android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
package com.loopj.android.http;
//www.java2s.comimport android.util.Log;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.methods.HttpUriRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
publicabstractclass RangeFileAsyncHttpResponseHandler extends FileAsyncHttpResponseHandler {
privatestaticfinal String LOG_TAG = "RangeFileAsyncHttpResponseHandler";
privatelong current = 0;
privateboolean append = false;
/**
* Obtains new RangeFileAsyncHttpResponseHandler and stores response in passed file
*
* @param file File to store response within, must not be null
*/public RangeFileAsyncHttpResponseHandler(File file) {
super(file);
}
@Override
publicvoid sendResponseMessage(HttpResponse response) throws IOException {
if (!Thread.currentThread().isInterrupted()) {
StatusLine status = response.getStatusLine();
if (status.getStatusCode() == HttpStatus.SC_REQUESTED_RANGE_NOT_SATISFIABLE){
//already finished
if (!Thread.currentThread().isInterrupted())
sendSuccessMessage(status.getStatusCode(), response.getAllHeaders(), null);
}
elseif (status.getStatusCode() >= 300) {
if (!Thread.currentThread().isInterrupted())
sendFailureMessage(status.getStatusCode(), response.getAllHeaders(), null, new HttpResponseException(status.getStatusCode(), status.getReasonPhrase()));
}
else {
if (!Thread.currentThread().isInterrupted()) {
Header header = response.getFirstHeader("Content-Range");
if (header == null) {
append = false;
current = 0;
}
else
Log.v(LOG_TAG, "Content-Rnage: " + header.getValue());
sendSuccessMessage(status.getStatusCode(), response.getAllHeaders(), getResponseData(response.getEntity()));
}
}
}
}
@Override
protectedbyte[] getResponseData(HttpEntity entity) throws IOException {
if (entity != null) {
InputStream instream = entity.getContent();
long contentLength = entity.getContentLength() + current;
FileOutputStream buffer = new FileOutputStream(getTargetFile(), append);
if (instream != null) {
try {
byte[] tmp = newbyte[BUFFER_SIZE];
int l;
while (current < contentLength && (l = instream.read(tmp)) != -1 && !Thread.currentThread().isInterrupted())
{
current += l;
buffer.write(tmp, 0, l);
sendProgressMessage((int)current, (int)contentLength);
}
} finally {
instream.close();
buffer.flush();
buffer.close();
}
}
}
return null;
}
publicvoid updateRequestHeaders(HttpUriRequest uriRequest) {
if (mFile.exists() && mFile.canWrite())
current = mFile.length();
if (current > 0) {
append = true;
uriRequest.setHeader("Range", "bytes=" + current + "-");
}
}
}