当前位置: 首页 > 知识库问答 >
问题:

使用JSoup的Eclipse Android应用程序,总是在Catch中结束

戴嘉珍
2023-03-14

我有一些代码,使用JSoup和连接到一个网站成功的Java。

我试图在Android上复制完全相同的东西(作为学习体验)。

我的JAVA代码中没有任何错误,并且已经确认它在JAVA(运行在Netbeans中)中仍然可以工作

我在libs文件夹中有我的JSoup jar~这是一个花了一点时间才找到的问题。

我已经放置了一些edittext.settext(“here”);查看代码的位置。

我试过这两种方法--使用android模拟器和通过USB电缆连接我的手机。我得到了同样的结果--“app”运行良好,但显示在catch{}中找到的消息。

我有些茫然,因为这些代码在Netbeans/常规Java中运行良好。

下面是我的代码:

package com.example.duckriver;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.jsoup.helper.Validate;


public class MainActivity extends Activity {

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

int counter;
Button Button1;
Button SummaryStats;
TextView display;
TextView editText;

String dataread = null;
String high = "High:";
String low = "Low:";
String filename = null;
int index = 0;
int startindex = 0;
int lastindex = 0;
int length = 0;
char[] CharArray = new char[1000];



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

    counter = 0;
    Button1 = (Button) findViewById(R.id.button1);
    SummaryStats = (Button) findViewById(R.id.buttonSummaryStats);
    display = (TextView) findViewById(R.id.tvMainDisplay);

    editText = (TextView) findViewById(R.id.editText);



    Button1.setOnClickListener(new View.OnClickListener()  {

        @Override
        public void onClick(View arg0) 
{
            // TODO Auto-generated method stub

            //counter++;


            Document doc;
            try{
                doc=Jsoup.connect("http://www.Google.com").get();
                editText.setText("Here");


        //get Title
                //String title = doc.title();
                //System.out.println("Title: "+title);

                //dataread = doc.body().text(); // "An example link"


                Element link = null;

            }//end try
            catch(Exception ex){
                ex.printStackTrace();
                editText.setText("Error");
                //((TextView)findViewById(R.id.tv)).setText("Error");
        }// end catch




        }
    });

    SummaryStats.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            counter = counter*counter;


        }
    });

    return true;
}

}

我不知所措。救命?

多谢了。

共有1个答案

丁正阳
2023-03-14

您需要下载带有异步任务的文档,否则Android将抛出异常。试试看:

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

    counter = 0;
    Button1 = (Button) findViewById(R.id.button1);
    SummaryStats = (Button) findViewById(R.id.buttonSummaryStats);
    display = (TextView) findViewById(R.id.tvMainDisplay);

    editText = (TextView) findViewById(R.id.editText);



    Button1.setOnClickListener(new View.OnClickListener()  {

        @Override
        public void onClick(View arg0) {
           downloadDocTask task = new downloadDocTask();
           task.execute("www.google.com");
         }
    });

    SummaryStats.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            counter = counter*counter;


        }
    });

    return true;
}


    private class downloadDocTask extends AsyncTask<String, Void, Document>{
        String urldisplay;
        @Override
        protected Document doInBackground(String... urls) {
            urldisplay = urls[0];
            Document doc = null;
            try {
                doc = Jsoup.connect(urldisplay).timeout(10*1000).get();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return doc;
            }

        @Override
        protected void onPostExecute(Document result) {
            if(result != null){
                Log.i(TAG, "downloadDocTask.onPostExcecute Document Download complete");
                buildHtml(result);
            }
            else{
                Log.i(TAG, "downloadDocTask.onPostExcecute Document == null");
            }
        }

    }


public void buildHtml(Document doc){
   // Parse document here
   String title = doc.title();
}
 类似资料:
  • 我让我的学长给我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。这表明开发人员不知道他/她在做什么,并有疑问。 由于这个问题得到了很多关注,有些人误解了这个问题(可能是因为我没有清楚地表达它),我打算重新表达它。 以下是开发人员在这里所做的 > 编写并测试一个函数,它可以是一个只是初始化视图的小函数,也可以是一个复杂的函数,测试后它被包裹在块中。即使

  • 我试图理解我们什么时候需要使用这个应用程序。在我们的node Express中使用 当我在网上搜索时,我在reddit上偶然发现了这个答案,它说明了应用程序之间的区别。获取和应用程序。使用 在此基础上,我总结了以下几点。 充当超级路由或中间件?这意味着它在? 此外,如果有人能添加更多关于app.use.的信息/练习,我将不胜感激

  • 在99%的情况下,当SQL server返回意外错误或文件系统中缺少文件时,我不能做任何合理的事情,我只想记录这种情况并将错误返回给用户。所以我看不出有什么理由应该返回“err”手动展开堆栈,实际上我会丢失stacktrace和上下文,并且更难找到错误的原因。 有没有什么我错过了,所以这种方法不会很好地工作?似乎大多数Go文章都建议不要使用panic/recover,但我不明白为什么。它看起来非常

  • 我尝试在JAVA代码中调用MessageBoxA函数。以下方法有什么问题,以至于我的程序抛出了很多错误? 1-st: run:线程“main”java.lang.ClassFormatError:java.lang.ClassLoader的类文件加载/库/MessageBox中的本机或抽象方法中的代码属性。java.lang.ClassLoader.defineClass(ClassLoader.

  • 问题内容: 假设我有一个实用程序类DateUtil(请参见下文)。若要使用此方法,调用者方法将使用DateUtils.getDateAsString(aDate)。删除static修饰符并使DateUtil成为spring bean(请参见DateUtilsBean)并将其注入到调用类中还是将其保持原样会更好吗? 春豆版本 问题答案: 我不这么认为。DateUtils类听起来像是一个纯实用程序类,

  • 我正在尝试使用JSoup解析通过Servlet生成的HTML文件。据我所知,我需要申报一份文件。当我运行代码时 Document doc=Jsoup。解析(URL,10000); 它总是超时,如果我增加超时时间,它将一直运行,直到达到该时间。当我输入,它只是永远运行。我在谷歌Chrome的macbook pro上工作。 我的问题是: 这只是我的电脑还是我做错了什么? 有没有一种方法可以解决这个问题