2012-04-07 82 views
2

新的android编程。出现跟踪错误。获取java.lang.OutOfMemoryError异常?

04-07 14:49:05.452: ERROR/AndroidRuntime(1566): FATAL EXCEPTION: main 
     java.lang.OutOfMemoryError 
     at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94) 
     at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145) 
     at java.lang.StringBuilder.append(StringBuilder.java:216) 
     at com.myapp.StartupActivity.onListItemClick(StartupActivity.java:87) 
     at android.app.ListActivity$2.onItemClick(ListActivity.java:319) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 
     at android.widget.AbsListView$1.run(AbsListView.java:3168) 
     at android.os.Handler.handleCallback(Handler.java:605) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4340) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
     at dalvik.system.NativeStart.main(Native Method) 

使用选项卡布局,并且有三个用于控制选项卡的活动。我想我跨越了可用于我的应用程序的内存堆。有人能告诉我如何摧毁对象时,你离开标签?在下面的代码中发生错误。

String separator = "|" 
String myString = ""; 
for(String string : Mylist) 
{ 
    myString += myString + string + separator; 
} 
+0

您的实现会创建大量不必要的中间字符串。考虑使用'StringBuilder'或一些第三方代码。使用Apache Commons,您可以使用'org.apache.commons.lang.StringUtils.join(MyList,separator)'代替。 – qerub 2012-04-07 09:38:57

+1

由Qerub建议使用StringBulder解决错误,但应用程序需要太多时间才能完成操作。所以我试过'String separator =“\\ |”正如hotveryspicy所建议的那样。现在应用程序完美无缺。多谢你们。 Stakeoverflow对我来说真的很有用。 – 2012-04-07 10:14:56

回答

1

尝试String separator = "\\|" 代替String separator = "|"

存在使用Java或可以使用Pattern.quote("|")

@Qerub 使用管道符号的一个问题值得一提的是,双斜线只有如果表达式字符串被编译到您的java代码中,则必要。

Java 编译器需要一个斜杠,以便它在表达式String对象中存储文字斜线。这不是正则表达式唯一的,所有在类文件中编译的Java字符串都以这种方式工作。如果您希望在编译后的类文件中的字符串中包含一个斜杠,请在Java源代码中输入两个斜杠。

如果在运行时将正则表达式传递给Java程序 - 通过命令行参数或属性值 - 第一个斜杠不是必需的。

正则表达式解析器需要另一个斜杠,以便将该管道视为文字字符。表达式解析器不关心字符串是编译到类文件中还是在运行时提供。

Source code: \\| 

which compiles to... 

Class file: \| 

现在由正则表达式分析器作为读...

表达式分析器将其视为:|

虽然我们在分割用()相同,则它被视为改变,这意思字符串被每个字符分割

源代码:“查询”

"query".split("|")给出如下结果:

q 
u 
e 
r 
y 
+0

你不是在想'String#split'吗? – qerub 2012-04-07 09:51:46

+0

你能否提供更多关于为什么会出现这种情况的信息?我很好奇。 – qerub 2012-04-08 16:32:03

+1

@Qerub这是我的信息,我会很高兴,如果你提供更多:) – 2012-04-08 17:27:00