gpt4 book ai didi

java - 如何在app中提取网站的html代码

转载 作者:行者123 更新时间:2023-12-01 17:57:39 24 4
gpt4 key购买 nike

我正在学习有关 Android Studio 的类(class),我的任务是使用 DownloadTask 类提取此网站的 HTML 代码 http://www.posh24.se/kandisar

但即使当我几乎复制老师的代码时,它对我也不起作用(同时,如果我下载他的整个项目并启动它,它会完美地工作),但对于提取的这个特定部分,它不起作用工作,我不知道为什么......

请注意,我确实在 AndroidManifest.xml 文件中写入了 Internet 权限: <uses-permission android:name="android.permission.INTERNET" />

我得到的是“失败”语句,这意味着 DownloadTask 中存在问题,但我不知道是什么问题!

这是我的 java 代码,我尝试在其中测试是否可以在日志中显示 HTML 代码:


package com.example.guesstheceleb;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;

public class MainActivity extends AppCompatActivity {

ImageView celebrityImageView;
Button button0;
Button button1;
Button button2;
Button button3;

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();
}

return result;

}
catch (Exception e) {

e.printStackTrace();

}

return "failed";
}
}

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

celebrityImageView = (ImageView) findViewById(R.id.celebrityImageView);
button0 = (Button) findViewById(R.id.button0);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);

DownloadTask taskURL = new DownloadTask();
String code = "";
try {
code = taskURL.execute("http://www.posh24.se/kandisar").get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("prout",code);

}
}

现在这是老师的代码。但真正重要的是 DownloadTask 类以及它在 onCreate 方法中的使用,但我将把它们全部放在以防万一

package com.example.robpercival.guessthecelebrity;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

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.util.ArrayList;
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class MainActivity extends Activity {

ArrayList<String> celebURLs = new ArrayList<String>();
ArrayList<String> celebNames = new ArrayList<String>();
int chosenCeleb = 0;
int locationOfCorrectAnswer = 0;
String[] answers = new String[4];

ImageView imageView;
Button button0;
Button button1;
Button button2;
Button button3;

public void celebChosen(View view) {

if (view.getTag().toString().equals(Integer.toString(locationOfCorrectAnswer))) {

Toast.makeText(getApplicationContext(), "Correct!", Toast.LENGTH_LONG).show();

} else {

Toast.makeText(getApplicationContext(), "Wrong! It was " + celebNames.get(chosenCeleb), Toast.LENGTH_LONG).show();

}

createNewQuestion();

}

public class ImageDownloader extends AsyncTask<String, Void, Bitmap> {


@Override
protected Bitmap doInBackground(String... urls) {

try {

URL url = new URL(urls[0]);

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

connection.connect();

InputStream inputStream = connection.getInputStream();

Bitmap myBitmap = BitmapFactory.decodeStream(inputStream);

return myBitmap;


} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;
}
}


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();
}

return result;

}
catch (Exception e) {

e.printStackTrace();

}

return null;
}
}

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

imageView = (ImageView) findViewById(R.id.imageView);
button0 = (Button) findViewById(R.id.button);
button1 = (Button) findViewById(R.id.button2);
button2 = (Button) findViewById(R.id.button3);
button3 = (Button) findViewById(R.id.button4);

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("<img src=\"(.*?)\"");
Matcher m = p.matcher(splitResult[0]);

while (m.find()) {

celebURLs.add(m.group(1));

}

p = Pattern.compile("alt=\"(.*?)\"");
m = p.matcher(splitResult[0]);

while (m.find()) {

celebNames.add(m.group(1));

}


} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

createNewQuestion();

}

public void createNewQuestion() {

Random random = new Random();
chosenCeleb = random.nextInt(celebURLs.size());

ImageDownloader imageTask = new ImageDownloader();

Bitmap celebImage;

try {

celebImage = imageTask.execute(celebURLs.get(chosenCeleb)).get();

imageView.setImageBitmap(celebImage);

locationOfCorrectAnswer = random.nextInt(4);

int incorrectAnswerLocation;

for (int i=0; i<4; i++) {

if (i == locationOfCorrectAnswer) {

answers[i] = celebNames.get(chosenCeleb);

} else {

incorrectAnswerLocation = random.nextInt(celebURLs.size());

while (incorrectAnswerLocation == chosenCeleb) {

incorrectAnswerLocation = random.nextInt(celebURLs.size());

}

answers[i] = celebNames.get(incorrectAnswerLocation);


}


}

button0.setText(answers[0]);
button1.setText(answers[1]);
button2.setText(answers[2]);
button3.setText(answers[3]);


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




}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

感谢您的耐心等待

最佳答案

我检查了你的代码并发现了问题。如果你想获取http://www.posh24.se/kandisar的Html,你应该使用代理网址。您的代码是正确的,您可以通过以下 URL 进行检查:http://info.cern.ch并查看结果。

关于java - 如何在app中提取网站的html代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60687981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com