猿问

Android:从 URL 读取文件引发 HttpURLConnectionImpl 错误

我使用 Android Studio 创建了一个 android 应用程序,它尝试检查应用程序使用的文件是否有更新版本,该文件存储在资产目录中。我已检查该文件是否可用且可访问,但由于我无法共享文件位置,因此我将在此示例中使用以下文本文件:http : //www.w3.org/TR/PNG/iso_8859-1。文本文件


我一直牢记在我的代码中包含以下内容:


1- 在 manifest.xml 文件中添加使用权限,如下所示:


<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    

2- 创建 AsyncTask 以在后台执行文件读取:


import android.content.Context;

import android.os.AsyncTask;

import android.util.Log;


import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;


public class CheckUpdate extends AsyncTask<Void,Void,Boolean>

{


String filename = "http://www.w3.org/TR/PNG/iso_8859-1.txt";


private Context ctx;


public CheckUpdate(Context myContext) {

    this.ctx = myContext;

    doInBackground();


}


@Override

protected Boolean doInBackground(Void... voids) {

    try {

        URL url = new URL(filename);

        File LocalFile = new File("file:///android_asset/test.txt");


        HttpURLConnection ucon = (HttpURLConnection) url.openConnection();

ucon.setReadTimeout(5000);

ucon.setConnectTimeout(10000);

ucon.setDoInput(true);

        ucon.setDoOutput(true);

        ucon.connect();

        if (ucon.getResponseCode() == 200) {

            InputStream isURL = ucon.getInputStream();

            BufferedInputStream inStream = new BufferedInputStream(isURL);


            long LocalFileModifiedDate = LocalFile.lastModified();

            long ExFileModifiedDate = ucon.getLastModified();


            if (LocalFile.exists()) {

                LocalFile.delete();

            }


            if (LocalFileModifiedDate < ExFileModifiedDate) {

                LocalFile.createNewFile();


                FileOutputStream outStream = new FileOutputStream(LocalFile);

                byte[] buff = new byte[5 * 1024];

哈士奇WWW
浏览 216回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答