【问题标题】:Strange Problem with Android, Program compiles but does not workAndroid的奇怪问题,程序编译但不起作用
【发布时间】:2010-11-16 01:23:27
【问题描述】:

在我的 android 项目中,我有一个简单的 Java 文件,它获取网页内容,对文本进行处理并将文本作为 String 返回。我在 Android 上的另一个活动中以 ScrollView 显示此文本。

它工作正常,但是当我尝试操作此 Java 文件中的文本时出现问题。我尝试使用数组,它没有工作然后切换回String,仍然没有。这只是一种无法提供任何输出但程序编译良好的特殊方法。

但是,在 Eclipse 的 Java 项目中尝试相同的方法时效果很好。

这是我的代码:

// 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;
}

如果这个方法没有问题,那为什么不提供任何输出呢?如果我在 Android 中返回 rawData,手机会正确显示所有内容。如果我返回输出结果String,手机里全是空白。

如果我在同一个 Android 项目中的另一个测试类 (test.java) 中调用此方法(比如在类 ABC 中创建),比如使用 String a = ABC.FillMenus(String b),就会出现一些奇怪的情况。我收到编译器错误,而它在 Android 手机中显示为空白。在 Java 项目中调用相同的东西绝对可以正常工作。

我有什么遗漏吗?

【问题讨论】:

  • 告诉我们你在用这个函数的返回值做什么
  • “程序编译但不工作”。欢迎编程 ;)
  • “我得到一个编译器错误”:你能指定什么错误吗?可能有帮助,你知道的。我假设您也打错了字,意思是 ABC.FillMenus(b)。如果没有,那就是你的错误。如果是,那么如果该类在另一个包中,您是否已导入该类?

标签: java android string unicode query-string


【解决方案1】:

一些事情

1) 你的 for 循环是为了什么?

2) if (c1c2) 是独占的,所以我建议将 if (c1>c2) 更改为 else(在您想更改代码时会有所帮助)

3)你应该初始化结果为null大于“”,它会帮助你在FillMenu的出口测试知道你的代码什么时候被跳过或者什么时候没有值。

现在我的猜测是由于某种原因 if (c1==16 || c2==1) break;被触发,因此 resultT 永远不会改变,因此存在为空。

你应该在调试中运行这段代码并在其中设置一个断点,特别是监控 c1 c2 的值

我认为没有足够的信息来帮助你更多的部分形式

杰森

【讨论】:

  • 嗨 Jason,实际上我在调试模式下再次检查了所有代码,发现循环在 c2==1 的第一次尝试时中断,并返回空白“”。但是,对于相同的文本(字符串)输入,由于某种原因它不会在 Java 编译器中中断并且工作正常。但是,通过进一步调试,我发现 android 中存在一些字符不匹配。电话不读取“€”欧元符号并显示为未知。我试图用 replace 或 replaceAll 方法替换它,但它根本不起作用,因为 android 手机不会读取从 html 页面返回的这个符号。我该怎么办??
  • 请在此处查看原始文本:img132.imageshack.us/img132/1692/problembj.jpg 我的搜索字符串包含此文本“€”,其中欧元符号显示了 android 模拟器中未知的内容。我无法弄清楚如何更改它,而这一点是重要的结束字符集,因为我必须在不同位置的大约 8-10 个网页中搜索相同的字符集。是否有任何解决方法可以将其更改为 android.xml 中可识别的内容。问题是相同的字符在 Java 编译器中运行良好并且运行良好。但是在android环境中它只是出于某种原因。请帮忙!
  • 更新:我检查了网络服务器的编码,它是 ISO-8859-1。我想也许它与标准使用 android 不同,所以我使用 getBytes("ISO-8859-1") 方法将其转换回标准。这是我现在得到的 rawText 响应:img245.imageshack.us/img245/4310/problem2b.jpg 我不知道,但我真的相信这是问题的原因。您对此有何意见。
  • 正如你所说,你的问题似乎来自欧元符号在 android 中没有被分析。我从来没有玩过欧元符号,但字符代码在 android 上应该是“\u20AC”。您应该尝试使用它和“€”。形成我检查的“€”和“\u20AC”打印出来的内容相同。就检测它而言,它应该是直截了当的。显示它我认为您可能需要向您的应用程序添加一些捆绑包,这可能会对developer.android.com/reference/java/util/ResourceBundle.html 有所帮助。无论如何,我认为您应该为 € pb 打开和新线程
  • UPDATE2:我很抱歉在这里写了太多消息。虽然我没有找到合适的解决方案,但我已经做了一个非常便宜的解决方法: public static String Euro(String k1){ // 例如 va?ue 将替换 unknown ?到 € 用于进一步处理 int k2;字符测试; for(int k=0; k
猜你喜欢
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 2012-04-27
相关资源
最近更新 更多