Приложение не захватывает HTML - PullRequest
0 голосов
/ 12 июня 2011

Редактировать:

Ошибка:

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, Please Try Again.", Toast.LENGTH_SHORT).show();
        e.printStackTrace();
        return "";
    }
    if(baseHtml == null || baseHtml.length() < 1){
        Toast.makeText(getApplicationContext(), "Error getting HtmlDoc, Please Try Again.", 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;
}

Надеюсь, это то, что вам нужно.

1 Ответ

1 голос
/ 12 июня 2011

Чтобы появился тост, вам нужно вызвать show() -метод.Например:

Toast.makeText(getApplicationContext(), "Error getting HtmlDoc, Please Try Again.", Toast.LENGTH_SHORT).show();

Подробнее см. здесь .


if(rawHtml == "" || rawHtml == null){[...]}

Я предполагаю, что rawHtml -объект является строкой?В этом случае, если вы хотите проверить, пуста ли эта строка, вы не должны использовать equals("") -метод или проверить длину строки:

if (rawHtml.length < 1)

Кроме того, если вам нужно проверить, является лиСтрока имеет значение null, сначала вы должны сделать это, потому что проверка длины (например) вызовет NullPointerException.


О вашем коде

if(rawHtml == null ...

Тестирование, если rawHtml равно нулю, не нужно, потому что в методе getHtml вы создаете его как пустую строку.Это никогда не будет null.

return "";

Вы возвращаете пустую строку в ваших parseHtml и getHtml -методах.Я предпочел бы вернуть null, а затем проверить, является ли возвращенное значение null.Вы можете сэкономить одно условие с тем же эффектом.

results[i-1] = "...";

Вычисление должно быть выполнено в скобках, например:

results[(i-1)] = "...";

Ваша ошибка появляется в этой строке:

results[i-1] = parseHtml(rawHtml,i);

Поскольку я не вижу, инициализируете ли вы results -объект, я думаю, это ваша проблема.Прежде чем вы сможете получить доступ (записать или прочитать) элемент в этом массиве, массив должен быть инициализирован.

Вот как вы это сделаете, предполагая, что ваш массив является массивом String:

String[] results = new String[NumberOfElements];

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...