首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用java下载网站源码

如何用java下载网站源码
EN

Stack Overflow用户
提问于 2020-05-16 19:52:20
回答 2查看 36关注 0票数 0

我在android开发和编程方面是新手。我带了一些android开发的在线教程,我想在我的应用程序中以字符串形式下载网站源代码以供处理,但我无法做到。有时应用程序需要5到10分钟才能得到响应,但我的应用程序仍然无法正常连接,下面是我使用的代码。请帮助我,并为我提供一些故障排除方法

Java代码:

代码语言:javascript
复制
package com.example.webapp1;

import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.ExecutionException;

public class MainActivity extends AppCompatActivity {

public class DownloadTask extends AsyncTask<String,Void,String>
{

    @Override
    protected String doInBackground(String... strings) {
        String result = "";
        URL url;
        URLConnection urlConnection = null;
        try {
                url = new URL(strings[0]);
                urlConnection =url.openConnection();
                InputStream in = urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                 int data = reader.read();

                 while (data != -1)
                 {
                     char current = (char) data;
                     result += current;
                     data = reader.read();
                 }

                 return result;

        }
        catch (Exception e)
        {
            e.getStackTrace();
            return "failed";
        }

    }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String result =null;
    DownloadTask task = new DownloadTask();
    try {
        result = task.execute("https://www.imdb.com/list/ls052283250/").get();
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Log.i("result content",result);
}
}

Android Mainfest:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.webapp1">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

EN

回答 2

Stack Overflow用户

发布于 2020-05-16 20:10:17

您的代码中有很多错误,似乎缺少使用Java、文件和Android API的基础知识。

我会推荐谷歌搜索一些初学者的教程,但我没有具体的建议。

以下是代码中的问题:

  1. 您通过将int变量添加到String来累积结果的方法是不正确的。

它将添加数值,而不是value表示的字符。

例如,字符串将包含"60“,而不是”<“标记。

您应该使用ByteBuffer或类似的方法。

  • 您没有正确处理返回值:您不能直接从execute方法获取后台(异步)任务的值。

您必须使用read the documentation才能学习如何使用AsyncTask类。

若要处理doInBackground的返回值,必须实现onPostExecute方法!

Android Studio和Android OS提供了几种工具来排除代码故障。

最基本的是日志:将信息写入logcatyou can use Log class,工作室可以显示这些信息。

还有,Android Studio comes with a debugger

票数 2
EN

Stack Overflow用户

发布于 2020-05-16 23:59:39

@LevM再次感谢我已经用下面的代码替换了现有的代码,但我仍然没有得到网站的全部源代码

代码语言:javascript
复制
 try
        {
            URL url = new URL(urls[0]);
            HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
            InputStream inputStream = urlConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
            String inputLine;
            StringBuilder stringBuilder = new StringBuilder();
            while ((inputLine = bufferedReader.readLine())!=null)
            {
                stringBuilder.append(inputLine);
            }
            bufferedReader.close();
            urlConnection.disconnect();
            return stringBuilder.toString();
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
            return "Failed";
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return  "Failed";
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61836289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档