Java Android下载zip文件错误(io错误)

Java Android下载zip文件错误(io错误),java,android,inputstream,foursquare,okhttp,Java,Android,Inputstream,Foursquare,Okhttp,嗨,我正在从网上下载一个zip文件并保存在SD卡上。 我不断得到java.net.SocketTimeoutException 错误: io error: java.net.SocketTimeoutException at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37) at

嗨,我正在从网上下载一个zip文件并保存在SD卡上。 我不断得到
java.net.SocketTimeoutException

错误:

io error: java.net.SocketTimeoutException
     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
     at okio.Okio$2.read(Okio.java:139)
     at okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
     at okio.RealBufferedSource.read(RealBufferedSource.java:50)
     at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:381)
     at okio.RealBufferedSource$1.read(RealBufferedSource.java:371)
     at java.io.DataInputStream.read(DataInputStream.java:63)
     at java.io.InputStream.read(InputStream.java:162)
     at java.io.DataInputStream.read(DataInputStream.java:59)
     at com.my.app.SyncFragment$25$1.onResponse(SyncFragment.java:3473)
     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
     at java.lang.Thread.run(Thread.java:818)
...
//New Request
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
final OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(logging)
        .build();


if (Utils.isConnectedToInternet(getActivity()))
    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {

            client
                    .newCall(getRequest(url))
                    .enqueue(new Callback() {
                        @Override
                        public void onFailure(Call call, IOException e) {
                            e.printStackTrace();
                        }

                        @Override
                        public void onResponse(Call call, Response response) throws IOException {
                            if (!response.isSuccessful())
                                throw new IOException("Unexpected code " + response);

                            try {

                                InputStream ins = response.body().byteStream();
                                DataInputStream dis = new DataInputStream(ins);

                                byte[] buffer = new byte[1024];
                                int length;


                                FileOutputStream fos = new FileOutputStream(new File(folderPath + "/" + filename + ".zip"));
                                while ((length = dis.read(buffer)) > 0) { //ERROR FROM THIS LINE*
                                    fos.write(buffer, 0, length);
                                }

                            } catch (MalformedURLException mue) {
                                Log.e("SYNC downloadZipFile", "malformed url error: ", mue);
                            } catch (IOException ioe) {
                                Log.e("SYNC downloadZipFile", "io error: ", ioe);
                            } catch (SecurityException se) {
                                Log.e("SYNC downloadZipFile", "security error: ", se);
                            } catch (Exception e) {
                                Log.e("SYNC downloadZipFile", "Exception: ", e);
                            }
                        }
                    });
        }
    });
    ...
我的代码:

io error: java.net.SocketTimeoutException
     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
     at okio.Okio$2.read(Okio.java:139)
     at okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
     at okio.RealBufferedSource.read(RealBufferedSource.java:50)
     at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:381)
     at okio.RealBufferedSource$1.read(RealBufferedSource.java:371)
     at java.io.DataInputStream.read(DataInputStream.java:63)
     at java.io.InputStream.read(InputStream.java:162)
     at java.io.DataInputStream.read(DataInputStream.java:59)
     at com.my.app.SyncFragment$25$1.onResponse(SyncFragment.java:3473)
     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
     at java.lang.Thread.run(Thread.java:818)
...
//New Request
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
final OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(logging)
        .build();


if (Utils.isConnectedToInternet(getActivity()))
    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {

            client
                    .newCall(getRequest(url))
                    .enqueue(new Callback() {
                        @Override
                        public void onFailure(Call call, IOException e) {
                            e.printStackTrace();
                        }

                        @Override
                        public void onResponse(Call call, Response response) throws IOException {
                            if (!response.isSuccessful())
                                throw new IOException("Unexpected code " + response);

                            try {

                                InputStream ins = response.body().byteStream();
                                DataInputStream dis = new DataInputStream(ins);

                                byte[] buffer = new byte[1024];
                                int length;


                                FileOutputStream fos = new FileOutputStream(new File(folderPath + "/" + filename + ".zip"));
                                while ((length = dis.read(buffer)) > 0) { //ERROR FROM THIS LINE*
                                    fos.write(buffer, 0, length);
                                }

                            } catch (MalformedURLException mue) {
                                Log.e("SYNC downloadZipFile", "malformed url error: ", mue);
                            } catch (IOException ioe) {
                                Log.e("SYNC downloadZipFile", "io error: ", ioe);
                            } catch (SecurityException se) {
                                Log.e("SYNC downloadZipFile", "security error: ", se);
                            } catch (Exception e) {
                                Log.e("SYNC downloadZipFile", "Exception: ", e);
                            }
                        }
                    });
        }
    });
    ...

首先,您实际上没有问任何问题,但我假设您想知道错误的含义

超时异常通常意味着您根本没有收到响应。


检查目标文件是否确实存在,检查您的输入是否有错误(http://或www缺失?),检查端口是否也打开-如果端口在服务器端被阻止,则可能发生这种情况。请尝试另一个文件,如果可能的话,可以在本地计算机上创建一个。

首先应该读取错误的含义以及收集到的关于这意味着什么的信息。