应用程序无法抓取HTML

问题描述

| 编辑: 错误
06-12 19:25:55.880: ERROR/AndroidRuntime(226): Uncaught handler: thread main exiting due to uncaught exception
06-12 19:25:55.910: ERROR/AndroidRuntime(226): java.lang.NullPointerException
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at com.laytproducts.songmaster.mainAct$1.onClick(mainAct.java:124)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.view.View.performClick(View.java:2364)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.view.View.onTouchEvent(View.java:4179)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.view.View.dispatchTouchEvent(View.java:3709)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-12 19:25:55.910: ERROR/AndroidRuntime(226):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
....
码:
rawHtml = getHtml(baseSite + rSearched); //get the raw html of page
if(rawHtml == null || rawHtml.length() < 1){//checks if it really contains anything
    Toast.makeText(getApplicationContext(),\"Error: Got No Result\",Toast.LENGTH_SHORT).show();
    Log.e(\"RawHtml Error:1\",\"nothing In rawHtml String\");
} else {
    for(int i = 1; i < 7; i++){
        String html = parseHtml(rawHtml,i);
        if(html == null || html.length() < 1){
            results[i-1] = \"Result not found:Please try different lyrics\";
        } else {
            results[i-1] = parseHtml(rawHtml,i); //error here
        }
    }
}
parseHtml:
public String parseHtml(String html,int num){
    String parsed = \"\";
    String artistParse = \"\";
    String songParse = \"\";
    //String fullHtmlParse = \"#NUMBER#. &nbsp;<span>This Charming Man</span> &nbsp; by Smiths</a>\";//Reference
    if(num != 0 && num <= 6){
        songParse = StringUtils.substringBetween(html,num+\". &nbsp;<span>\",\"</span>\");
        artistParse = StringUtils.substringBetween(html,num+\". &nbsp;<span>\"+songParse+\"</span> &nbsp; by \",\"</a>\");
    } else {
        Toast.makeText(getApplicationContext(),\"Error: Number is wrong in parseHtml,Please Try Again.\",Toast.LENGTH_SHORT).show();
        Log.e(\"ParsedHtml Error:1\",\"Error: Number in parseHtml is invalid: \" + num);
        return \"\";
    }
    parsed = songParse + \":\" + artistParse;
    return parsed;
}
getHtml:
public String getHtml(String url){
    String html = \"\";
    String baseHtml = \"\";
    String table = \"\";
    try {
        baseHtml = new StringReader(url).toString();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(),\"Error getting HtmlDoc,Toast.LENGTH_SHORT).show();
        e.printstacktrace();
        return \"\";
    }
    if(baseHtml == null || baseHtml.length() < 1){
        Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();
        Log.e(\"BaseHtml Error:1\",\"Error: nothing in baseHtml[method getHtml(String url)]\");
        return \"\";
    } else {
        //table = StringUtils.substringBetween(baseHtml,\"<!-- EyesLyrics.com search results -->\",\"</table>\");
    }
    html = baseHtml;
    return html;
}
希望那是您所需要的。     

解决方法

        要使Toast出现,您需要调用
show()
方法。像这样:
Toast.makeText(getApplicationContext(),\"Error getting HtmlDoc,Please Try Again.\",Toast.LENGTH_SHORT).show();
有关更多详细信息,请参见此处。
if(rawHtml == \"\" || rawHtml == null){[...]}
我猜the7对象是字符串吗?在这种情况下,如果要检查此String是否为空,则既不使用
equals(\"\")
方法也不检查String的长度:
if (rawHtml.length < 1)
另外,如果需要检查String是否为
null
,则应首先执行此操作,因为检查长度(例如)会导致
NullPointerException
。 关于您的代码
if(rawHtml == null ...
无需测试
rawHtml
是否为空,因为在
getHtml
方法中,您将其创建为空String。永远不会是10英镑。
return \"\";
您在
parseHtml
getHtml
方法中返回空字符串。我宁愿返回
null
,然后检查返回的值是否为
null
。您可以保留一个条件以达到相同的效果。
results[i-1] = \"...\";
计算应放在方括号中,如下所示:
results[(i-1)] = \"...\";
您的错误提示在此行上:
results[i-1] = parseHtml(rawHtml,i);
我看不到是否初始化
results
对象,所以我想这是您的问题。在可以访问(写入或读取)此数组中的元素之前,需要初始化该数组。 假设您的数组是一个字符串数组,这就是您要执行的操作:
String[] results = new String[NumberOfElements];
我希望这能解决您的问题。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...