Java Can';不要下载网页内容
我是java和android新手,作为我正在学习的课程的一部分,我必须将网页内容下载到日志中。不管怎样,我都不能让它工作。我得到了错误信息: 无法启动活动组件信息 NullPointerException 我正在使用Android Studio 3.5 多谢各位 我试着对照课程代码检查代码,结果匹配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
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是一种类型化语言