问题描述
|
编辑:
错误:
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#. <span>This Charming Man</span> by Smiths</a>\";//Reference
if(num != 0 && num <= 6){
songParse = StringUtils.substringBetween(html,num+\". <span>\",\"</span>\");
artistParse = StringUtils.substringBetween(html,num+\". <span>\"+songParse+\"</span> 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];
我希望这能解决您的问题。