Странная проблема с Android, программа компилируется, но не работает - PullRequest
0 голосов
/ 16 ноября 2010

В моем проекте для Android у меня есть простой Java-файл, который получает содержимое веб-страницы, что-то делает с текстом и возвращает текст как String. Этот текст я отображаю в ScrollView в другой активности на Android.

Работает нормально, но проблема возникает, когда я пытаюсь манипулировать текстом в этом Java-файле. Я пытался с массивами, это не сработало, затем переключился обратно на String, но все равно ничего. Это просто особый метод, который не может обеспечить какой-либо вывод, но программа компилируется нормально.

Тем не менее, тот же метод при попытке в Java-проекте в Eclipse прекрасно работает.

Вот мой код:

// This method will return selected stripped text extracted from rawData
public static String FillMenus(String rawData){
    String resulT = "";
    int c1, c2;
    for(int i=0; i<11; i++){ 
        c1 = rawData.indexOf("\" width=\"50px\" />") + 17;
        c2 = rawData.indexOf(" €</td>") + 2;

        if (c1==16 || c2==1) break;
        if (c1<=c2){
            resulT = resulT+"\n"+ rawData.substring(c1, c2); 
            rawData = rawData.substring(c2);
        }
        if (c1>c2){ 
            resulT = resulT+"\n"+StripTag((rawData.substring(0, c2))); 
            rawData = rawData.substring(c2);
        }
    } 
    return resulT;
}

Если в этом методе нет ничего плохого, то почему он не дает никакого вывода? Если я верну rawData в Android, телефон все отобразит правильно. Если я верну результат вывода String, в телефоне все пусто.

Если я вызываю этот метод (скажем, созданный в классе ABC) в другом тестовом классе (test.java) внутри того же проекта Android, скажем, с String a = ABC.FillMenus(String b), то происходит что-то странное. Я получаю сообщение об ошибке компилятора, в то время как в телефоне Android он отображается пустым. И то же самое, что вызывается из Java-проекта, работает абсолютно нормально.

Я что-то упускаю?

1 Ответ

1 голос
/ 16 ноября 2010

Несколько вещей

1) для чего вам цикл?

2) if (c1 <= c2) и if (c1> c2) являются эксклюзивными, поэтому я рекомендую изменить if (c1> c2) на else (помогает в будущем, когда вы захотите изменить код)

3) вы должны инициализировать результат в null больше, чем "", это поможет вам протестировать при выходе из FillMenu, чтобы узнать, когда ваш код был пропущен или когда нет значений.

теперь я думаю, что по какой-то причине if (c1 == 16 || c2 == 1) break; запускается, и поэтому resultT никогда не изменяется, следовательно, существует пустым.

Вы должны запустить этот код в режиме отладки и поставить точку останова, особенно следить за значениями c1 c2

форма детали, которую я не думаю, что есть достаточно информации, чтобы помочь вам больше

Jason

...