我是java和android新手,作为我正在做的类(class)的一部分,我必须将网页内容下载到日志中。但是我无法让它工作。我收到错误: 无法启动 Activity ComponentInfo 空指针异常
我使用的是 Android Studio 3.5
谢谢。
我已尝试根据类(class)代码检查该代码并且它匹配。
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();
}
}
}
我期望将网页内容返回到Log
最佳答案
好吧,奥利弗,让我在你被恶搞之前帮助你,因为你是新来的,
欢迎来到 StackOverflow :)
问题中没有太多错误日志,但是该错误确实告诉您其中一个对象未初始化,因此您得到 NullPointerException
(欢迎来到java中最常见的错误)。
我整理了一些可以帮助您的代码。
有几点需要注意,
- 确保您的 Activity 存在于 AndroidManifest.xml 文件中。
这是
<uses-permission android:name="android.permission.INTERNET" />
存在于您的 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 } } }
- 请尝试检查您在 Google (StackOverflow) 上收到的每个错误
- 尝试为您的编码考虑一个严格的反馈循环,当您得到它们时,您会尽快发现任何错误。
- 如果您是 Java 新手,请考虑一些教程 ( Practical Programming )。
- Java 是一种类型化语言,如果您正在学习编程,这是一个很好的起点,但是如果您想坚持使用 Android,请考虑转向 Kotlin 语言
- 在提问之前先做一点功课,这在 Stack-overflow 中会有所收获,
- 请尽可能帮助他人。
关于java - 无法下载网页内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043404/