GSON 2.2.2 4.2.1造成计算器只 [英] Gson 2.2.2 causing a stackoverflow on 4.2.1 only

查看:309
本文介绍了GSON 2.2.2 4.2.1造成计算器只的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为Android开发其下载使用JSON字符串服务器兴趣点的应用程序。一切都工作正常,但因为我已经开始测试在4.2.1,我一直得到以下错误:

I am developing an app for android which downloads points of interest from a server using JSON strings. Everything was working fine but since I have started testing on 4.2.1, I have been getting the following error:

01-28 15:32:14.167: E/AndroidRuntime(31174): FATAL EXCEPTION: AsyncTask #1
01-28 15:32:14.167: E/AndroidRuntime(31174): java.lang.RuntimeException: An error occured while executing doInBackground()
01-28 15:32:14.167: E/AndroidRuntime(31174):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.lang.Thread.run(Thread.java:856)
01-28 15:32:14.167: E/AndroidRuntime(31174): Caused by: java.lang.StackOverflowError
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:371)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:355)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:117)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.Gson.getAdapter(Gson.java:353)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.Gson.getAdapter(Gson.java:353)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.Gson.getAdapter(Gson.java:353)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:

奇怪的是,它工作正常我都想尽其他版本的...

The weird thing is, it works fine on every other version I have tried...

下面是一行我认为这是在崩溃:

Here is the line I think it is crashing at:

    Gson g = new Gson();
    JSONResponse jsonResponse = g.fromJson(serverReply, JSONResponse.class); <---

和班级我想创建:

/**
 * The JSONResponse from the server
 * @author Tom
 *
 */
public class JSONResponse {
    private String          status;
    private PointOfInterest result;

    /**
     * Creates a JSONResponse object 
     * @param json
     * @return
     */
    static JSONResponse convertJSONToResponse(String json){
        Gson gson = new Gson();
        JSONResponse jsonResponse = gson.fromJson(json, JSONResponse.class);
        return jsonResponse;
    }

    /**
     * Get Point of Interest
     */

    public PointOfInterest getPointofInterest(){
        return result;
    }

    public String getStatus(){
        return status;
    }

    /**
     * Get PrivateSection, area we can put our own data
     */
    /*
    public String getPrivateSection(){
        return privateSection;
    }
    */
    /**
     * Creates a JSONResponse object 
     * @param json
     * @return
     */
    String convertJSONResponseToJSON(){
        Gson gson = new Gson();
        return gson.toJson(this);
    }
}

请注意,我知道我在这里所使用的可怕的设计模式,这个应用程序是一个移动应用程序级的我正在上大学,以便把它容易对我!

Please note I am aware of the terrible design pattern I have employed here, this application is for a mobile apps class I am taking in college so take it easy on me !

修改 原来降级GSON 1.7.1对我的作品。

Edit Turns out downgrading gson to 1.7.1 works for me.

推荐答案

所以,事实证明这是一个错误的埃里克Nedwidek指出。我带着简单的方法,并从降级GSON <一href="http://$c$c.google.com/p/google-gson/downloads/detail?name=google-gson-2.2.2-release.zip">2.2.2到<一个href="http://$c$c.google.com/p/google-gson/downloads/detail?name=google-gson-1.7.1-release.zip&can=2&q=">1.7.1,一切工作一种享受吧!

So it turns out this is a bug as Erik Nedwidek pointed out. I took the easy route and downgraded gson from 2.2.2 to 1.7.1, everything works a treat now !

这篇关于GSON 2.2.2 4.2.1造成计算器只的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆