Java Can';不要下载网页内容

Java Can';不要下载网页内容,java,android-asynctask,httpsurlconnection,Java,Android Asynctask,Httpsurlconnection,我是java和android新手,作为我正在学习的课程的一部分,我必须将网页内容下载到日志中。不管怎样,我都不能让它工作。我得到了错误信息: 无法启动活动组件信息 NullPointerException 我正在使用Android Studio 3.5 多谢各位 我试着对照课程代码检查代码,结果匹配 package com.android.guessthecelebrity; import androidx.appcompat.app.AppCompatActivity; impor

我是java和android新手,作为我正在学习的课程的一部分,我必须将网页内容下载到日志中。不管怎样,我都不能让它工作。我得到了错误信息: 无法启动活动组件信息 NullPointerException

我正在使用Android Studio 3.5

多谢各位

我试着对照课程代码检查代码,结果匹配

    package com.android.guessthecelebrity;

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.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {


    public class downloadTask extends AsyncTask<String, Void, String>{
        @Override
        protected String doInBackground(String... urls) {
        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(urls[0]);
            urlConnection = (HttpURLConnection)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();
            }

        }catch (Exception e) {
            e.printStackTrace();
        }

        return null;
        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        downloadTask task = new downloadTask();
        String result = null;
        try {
            result = task.execute("http://www.posh24.se/kandisar").get();

            String [] splitResult = result.split("<div class=\"sidebarContainer\">");
            Pattern p = Pattern.compile("src=\"(.*?)\"");
            Matcher m = p.matcher(splitResult[0]);// [0] refers to the part before the split point

            while (m.find()) {
                System.out.println(m.group(1));

            }

            p = Pattern.compile("alt=\"(.*?)\"");
            m = p.matcher(splitResult[0]);// [0] refers to the part before the split point


            System.out.println(m.group(1));

        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }
}
package com.android.guessthecelebrity;
导入androidx.appcompat.app.appcompat活动;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.concurrent.ExecutionException;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类MainActivity扩展了AppCompatActivity{
公共类downloadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
字符串结果=”;
网址;
HttpURLConnection-urlConnection=null;
试一试{
url=新url(url[0]);
urlConnection=(HttpURLConnection)url.openConnection();
InputStream in=urlConnection.getInputStream();
InputStreamReader reader=新的InputStreamReader(in);
int data=reader.read();
while(数据!=-1){
当前字符=(字符)数据;
结果+=电流;
data=reader.read();
}
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
downloadTask任务=新建downloadTask();
字符串结果=null;
试一试{
结果=任务。执行(“http://www.posh24.se/kandisar).get();
字符串[]splitResult=result.split(“”);
模式p=Pattern.compile(“src=\”(.*?\”);
Matcher m=p.Matcher(splitResult[0]);//[0]表示分割点之前的零件
while(m.find()){
系统输出println(m.group(1));
}
p=Pattern.compile(“alt=\”(.*?\”);
m=p.matcher(分割结果[0]);//[0]指分割点之前的零件
系统输出println(m.group(1));
}捕获(执行例外){
e、 printStackTrace();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}

我希望网页内容会返回到日志中

好的,奥利弗,在你被跟踪之前让我帮你,因为你是新来的

欢迎来到StackOverflow:)

问题中没有太多的错误日志,但是错误确实告诉您其中一个对象没有初始化,因此您会得到
NullPointerException
(欢迎使用java中最常见的错误)

我已经整理了一些代码来帮助您

没什么值得注意的

  • 确保您的活动存在于AndroidManifest.xml文件中
  • 这是AndroidManifest.xml文件中的

    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.nio.charset.StandardCharsets;
    
    import your.package.name.R;
    
    
    public class GetWebContentActivity extends AppCompatActivity {
    
    
    
    private static final String TAG = "GetWebContent";
    
    private TextView webContentTextView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_web_content);
        setSupportActionBar(findViewById(R.id.toolbar));
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
        webContentTextView = findViewById(R.id.web_content_text_view);
        (new GetWebContent()).execute("https://www.google.com/"); //argument is the website link
    
    }
    
    class GetWebContent extends AsyncTask<String, Void, String> {
    
        private String webContentResult = "Couldn't get web content";
    
        @Override
        protected String doInBackground(String... strings) {
    
            String urlOfTheWebsite = strings[0];
    
            try {
                URL url = new URL(urlOfTheWebsite);
    
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    
                InputStream inputStream = httpURLConnection.getInputStream();
    
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
    
                String tempText = null;
                StringBuilder stringBuilder = new StringBuilder();
                while ((tempText = bufferedReader.readLine()) != null) {
                    stringBuilder.append(tempText);
                }
    
                webContentResult = stringBuilder.toString();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return webContentResult;
        }
    
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
    
            Log.d(TAG, "" + s); // you may log the web content like this
            //or
            webContentTextView.setText("" + s); // print this on UI
        }
    
    }
    }
    
    导入android.os.AsyncTask;
    导入android.os.Bundle;
    导入android.util.Log;
    导入android.widget.TextView;
    导入androidx.appcompat.app.appcompat活动;
    导入java.io.BufferedReader;
    导入java.io.IOException;
    导入java.io.InputStream;
    导入java.io.InputStreamReader;
    导入java.net.HttpURLConnection;
    导入java.net.MalformedURLException;
    导入java.net.URL;
    导入java.nio.charset.StandardCharset;
    导入您的.package.name.R;
    公共类GetWebContentActivity扩展了AppCompatActivity{
    私有静态最终字符串标记=“GetWebContent”;
    私有文本视图webContentTextView;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u get\u web\u content);
    设置支持操作栏(findViewById(R.id.toolbar));
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    webContentTextView=findViewById(R.id.web\u内容\u文本\u视图);
    (新建GetWebContent())。执行(“https://www.google.com/“”;//参数是网站链接
    }
    类GetWebContent扩展了AsyncTask{
    私有字符串webContentResult=“无法获取web内容”;
    @凌驾
    受保护的字符串背景(字符串…字符串){
    字符串urlofWebSite=strings[0];
    试一试{
    URL=新URL(网站的URL);
    HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
    InputStream InputStream=httpURLConnection.getInputStream();
    BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream,StandardCharsets.UTF_8));
    字符串文本=null;
    StringBuilder StringBuilder=新的StringBuilder();
    而((testext=bufferedReader.readLine())!=null){
    stringBuilder.append(testext);
    }
    webContentResult=stringBuilder.toString();
    }捕获(格式错误){
    e、 printStackTrace();
    }捕获(IOE异常){
    e、 printStackTrace();
    }
    返回webContentResult;
    }
    @凌驾
    受保护的void onPostExecute(字符串s){
    super.onPostExecute(s);
    Log.d(TAG,“+s);//您可以这样记录web内容
    //或
    webContentTextView.setText(“+s);//在UI上打印此文件
    }
    }
    }
    

  • 请尝试检查您在Google上遇到的每个错误(StackOverflow)
  • 试着考虑一个严格的反馈循环到你的编码中,当你得到它们时,你会尽快发现任何错误。李>
  • 如果您是java新手,请考虑很少的教程().<
  • Java是一种类型化语言