【问题标题】:java.lang.OutOfMemoryError in android Applicationandroid 应用程序中的 java.lang.OutOfMemoryError
【发布时间】:2014-10-23 10:07:16
【问题描述】:
        try {       
            Gson gson = new Gson();
            try
            {
                ((ProfileActivity)getActivity()).interactionResult = gson.fromJson(HomeCardString.toString(), InteractionSummaryResult.class);

            }
            catch(Exception e)
            {
                Log.i("myyyy", e.getMessage());
                e.printStackTrace();
            }

        } catch (Throwable t) {
            Log.e("My App", "Could not parse malformed JSON: \"" + responseString + "\"" + t.getMessage());
        }

gson.fromgson ..... 这一行在Throwable t .... 创建异常。我在HomeCardString.toString() 中的数据非常大。记事本文件中大约 1.9MB。我无法减少该数据的大小。那该怎么办?

08-29 16:34:36.963: E/AndroidRuntime(29319): FATAL EXCEPTION: main
08-29 16:34:36.963: E/AndroidRuntime(29319): java.lang.OutOfMemoryError
08-29 16:34:36.963: E/AndroidRuntime(29319):    at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at java.lang.StringBuilder.append(StringBuilder.java:216)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at com.stalker.androidapp.InteractionTabFragment$ProfileInteractionCall.onPostExecute(InteractionTabFragment.java:175)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at com.stalker.androidapp.InteractionTabFragment$ProfileInteractionCall.onPostExecute(InteractionTabFragment.java:1)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at android.os.AsyncTask.finish(AsyncTask.java:602)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at android.os.AsyncTask.access$600(AsyncTask.java:156)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at android.os.Looper.loop(Looper.java:137)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at android.app.ActivityThread.main(ActivityThread.java:4448)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at java.lang.reflect.Method.invokeNative(Native Method)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at java.lang.reflect.Method.invoke(Method.java:511)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
08-29 16:34:36.963: E/AndroidRuntime(29319):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 为什么不能减小数据的大小? 1.9 MB 的 JSON 数据……至少可以这么说。

标签: java android eclipse memory android-asynctask


【解决方案1】:

改变

        Log.e("My App", "Could not parse malformed JSON: \"" + responseString + "\"" + t.getMessage());

        String res = responseString.length() > 160 
            ? responseString.substring(0, 40) + "..." : responseString;
        Log.e("My App", "Could not parse malformed JSON: \"" + res + "\":\n" + t.getMessage());

因为日志记录并不重要。

【讨论】:

  • 这很有帮助,但我正在寻找布鲁诺分享的东西
【解决方案2】:

您可以尝试在清单中为您的应用程序设置android:largeHeap="true"。这是参考:

http://developer.android.com/reference/android/R.styleable.html#AndroidManifestApplication_largeHeap

如果这不起作用,请查看此帖子:

JAVA - Best approach to parse huge (extra large) JSON file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多