添加到ArrayList不能按预期工作/错误

时间:2015-03-10 18:28:57

标签: java android arraylist

我首先要说的是我对android很新,而且对java也是新手,所以我为丢失任何对其他人来说显而易见的事情而道歉。

下面显示的代码应该从assets文件夹中的文件中读取一行,只要下一行不为空,将该行的内容分配给变量('stringBuffer'{{1然后将此变量添加到String

ArrayList

我正在手机上运行应用程序,当应该进行此过程时,应用程序将变为黑色,LogCat显示“GC_FOR_ALLOC已释放”,后跟不同的数字。

我尝试评论String stringBuffer = ""; BufferedReader reader = null; ArrayList<String> fileLines = new ArrayList<>(); input = mContext.getAssets().open("Nodes.txt"); reader = new BufferedReader(new InputStreamReader(input)); while((stringBuffer = reader.readLine()) != null) { fileLines.add(stringBuffer); } reader.close();` 行并且程序再次运行,这就是为什么我假设出现问题的原因是由于这一行。

我想知道这个fileLines.add(stringBuffer);意味着什么,以及它为什么会发生。如果需要任何其他信息,请随时询问。

编辑:这是一个非活动类是重要的。

3 个答案:

答案 0 :(得分:1)

尝试使用此代替代码中的内容:

ArrayList <String> fileLines = new ArrayList<String>();

答案 1 :(得分:0)

GC_FOR_ALLOC表示已触发垃圾收集,因为堆上没有足够的空间来创建新对象。这可以在创建新对象时触发。看起来你正在创建很多本地对象(?)。试着减少那些,也许吧。

来源:What do GC_FOR_MALLOC, GC_EXPLICIT, and other GC_* mean in Android Logcat?

答案 2 :(得分:0)

你可以尝试这个 - 提供缓冲区大小也许可以解决问题,对我来说工作正常。

            AssetManager am = getAssets();
            InputStream is = am.open("tables.txt");
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);