2016-09-03 2 views
1

я получаю случайные ошибки (не все соединения) java.lang.IllegalArgumentException: ByteCount < 0: -291674 из этого кодаAndroid java.lang.IllegalArgumentException: ByteCount

URL connurl = new URL(newUrl); 
conn = (HttpURLConnection) connurl.openConnection(); 
conn.setRequestProperty("User-Agent", "Android"); 
conn.setConnectTimeout(5000); 
conn.setRequestMethod("GET"); 
if (finish != 0L) 
    conn.setRequestProperty("Range", "bytes=" + finish + "-" + size); 
conn.connect(); 
int getResponseCode = conn.getResponseCode(); 
String getContenttype = conn.getContentType(); 
int contentLenght = conn.getContentLength(); 
if (!StringUtils.startsWith(String.valueOf(getResponseCode), "20")) { 
} 
else if(StringUtils.startsWithIgnoreCase(getContenttype, "text/html")) { 
} 
else if(contentLenght < (size-finish)) { 
} 
else { 
    ReadableByteChannel channel = Channels.newChannel(conn.getInputStream()); 
    accessFile = new RandomAccessFile(filePath, "rwd"); 
    accessFile.seek(finish); 
    fileStream = new FileOutputStream(filePath, true); 
    ByteBuffer buffer = ByteBuffer.allocate(1024); 
    byte[] data; 
    int temp; 
    while ((temp = channel.read(buffer)) > 0) { <-- error in this line 
    } 

Ошибка:

java.lang.IllegalArgumentException: byteCount < 0: -1647333 
    at com.android.okhttp.okio.RealBufferedSource.read(RealBufferedSource.java:46) 
    at com.android.okhttp.internal.http.HttpConnection$FixedLengthSource.read(HttpConnection.java:418) 
    at com.android.okhttp.okio.RealBufferedSource$1.read(RealBufferedSource.java:349) 
    at java.io.InputStream.read(InputStream.java:162) 
    at java.nio.channels.Channels$InputStreamChannel.read(Channels.java:306) 

Как это исправить? Спасибо

+0

Вы уверены, что вы получаете '200' ответ? – Shaishav

+0

Как вы инициализируете свою переменную 'conn'? – earthw0rmjim

+0

случайная ошибка, не все соединение. conn и http code проверены вверху в этом коде if (! StringUtils.startsWith (String.valueOf (getResponseCode), "20")) { –

ответ

0

Это, вероятно, связано с этим вопросом: https://github.com/square/okhttp/issues/3104

Как было предложено, рассмотреть возможность использования okhttp-urlconnection как:

OkHttpClient okHttpClient = new OkHttpClient(); 
URL.setURLStreamHandlerFactory(new OkUrlFactory(okHttpClient)); 
Смежные вопросы