gpt4 book ai didi

java - 将 JSoup 与 Android Java 结合使用

转载 作者:行者123 更新时间:2023-12-01 19:00:53 25 4
gpt4 key购买 nike

package com.example.application;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import com.example.androidtablayout.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;


public class PhotosActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {


String htmlCode = "";

Document doc;
try {
//Problem start
doc = Jsoup.connect("http://www.example.com/").get();
Element content = doc.select("a").first();
String variable = content.text();
// Problem end
TextView t = new TextView(this);
t=(TextView)findViewById(R.id.textView3);
t.setText(variable);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

super.onCreate(savedInstanceState);
setContentView(R.layout.photos_layout);

}
}

我的问题是 JSoup 框架。 “问题”行之间。我采取“意外停止错误”。

当我像这样放置“htmlCode”变量时

t.SetText(htmlCode); 

这是工作,但我得到了所有的 html 源代码。

主要问题是什么,我不明白。

最佳答案

您的代码有很多错误:

  • super.onCreate() 应该始终是您自己的 onCreate()

  • 中的第一个调用
  • 您在最后调用 setContentView(),但尝试在此之前的 catch 子句中调用 findViewById()。此时,您的 Activity 还没有内容 View ,因此 findViewById() 将返回 null —— 生成的 NullPointerException 很可能是您的代码崩溃的原因。

  • 您在 UI 线程上执行 IO。不要这样做,Android 会强制退出你的应用程序,因为 IO 是不可预测的,你的应用程序将没有响应,对于网络 IO 来说情况更糟。查看AsyncTask了解如何在 UI 线程之外执行 IO,然后异步更新您的 TextView

此外,请查看logcat 。对于大多数崩溃,它将包含一个堆栈跟踪,可以查明出了问题的位置。

<小时/>

这是您的代码的修改版本,它遵循我给出的一些建议。

请注意,我没有有时间解决最重要的问题:此代码仍然在 UI 线程上执行 IO。它应该使用 AsyncTask相反!

public class PhotosActivity extends Activity {

// Use a string constant to "tag" log statements that belong to the same
// feature/module of your app. This activity does something with "photos" so
// use that as a tag. It's the first parameter to Android's Log methods.
private static final String TAG = "photos";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call super.onCreate() first.
setContentView(R.layout.photos_layout); // Then load the layout.

// Find textView3 in layout and set it's text to HTML code.
// There's no need to create a new TextView() here.
TextView textView = (TextView) findViewById(R.id.textView3);
textView.setText(getHtmlCode());
}

// Structure your code. If it's a larger block that does one thing,
// extract it into a method.
private String getHtmlCode() {
try {
Document doc = Jsoup.connect("http://www.example.com/").get();
Element content = doc.select("a").first();
return content.text();
} catch (IOException e) {
// Never e.printStackTrace(), it cuts off after some lines and you'll
// lose information that's very useful for debugging. Always use proper
// logging, like Android's Log class, check out
// http://developer.android.com/tools/debugging/debugging-log.html
Log.e(TAG, "Failed to load HTML code", e);
// Also tell the user that something went wrong (keep it simple,
// no stacktraces):
Toast.makeText(this, "Failed to load HTML code",
Toast.LENGTH_SHORT).show();
}
}
}

关于java - 将 JSoup 与 Android Java 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12353003/

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