Java(Android)中带有heritance的奇怪错误日志

Java(Android)中带有heritance的奇怪错误日志,java,android,json,Java,Android,Json,我正面临一个非常奇怪的错误,我无法解释,也许你可以帮助我: 我正在使用JSON,我有一个类用于将响应代码包装在JSON中,如{“code”:“0”}: public class Container { int responseCode=0; protected int _object_id=0; public Container(String fromJSON){ _object_id=new Random().nextInt(); t

我正面临一个非常奇怪的错误,我无法解释,也许你可以帮助我:

我正在使用JSON,我有一个类用于将响应代码包装在JSON中,如{“code”:“0”}

public class Container {

    int responseCode=0;
    protected int _object_id=0;

    public Container(String fromJSON){
        _object_id=new Random().nextInt();
        try {
            setWithJSON(fromJSON);
        } catch (Exception e) {
            e.printStackTrace();
            responseCode=-1;
        }
    }

    protected JSONObject setWithJSON(String input) throws Exception{
        JSONObject json = new JSONObject(input);
        responseCode = json.getInt("code");
        return json;
    }

}
扩展该类我有另一个类用于包装响应代码+url:{“code”:“0”,“url_标记”:”http://good.url.com“}

public class URLContainer extends Container {
    private final String TAG="Test";
    private String _url = "default_url";

    public URLContainer(String fromJSON) {
        super(fromJSON);
    }

    @Override
    protected JSONObject setWithJSON(String input) throws Exception {
        JSONObject json= super.setWithJSON(input);
        _url=json.optString("url_tag", "no_url");
        getUrl();  //Just for print the pointB
        Log.e(TAG,"Point A ("+_object_id+"): url="+_url);
        return json;
    }

    public String getUrl() {
        Log.e(TAG,"Point B ("+_object_id+"): url="+_url);
        return _url;
    }

    public void setUrl(String url) {
        _url = url;
    }       
}
活动课:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    String json="{\"code\":\"0\",\"url_tag\":\"http://good.url.com\"}";
    URLContainer container = new URLContainer(json);
    Log.e("adsads",""+container.getUrl());
}
生成的日志为:

 E/Test(20264): Point B (-569874754): url=http://good.url.com
 E/Test(20264): Point A (-569874754): url=http://good.url.com
 E/Test(20264): Point B (-569874754): url=default_url
 E/Final(20264): default_url
为什么最后一个调用返回默认的url而不是好的url?

这会起作用

        .......
        public Container(String fromJSON){
          _object_id=new Random().nextInt();
          //            try {
          //                setWithJSON(fromJSON);
          //            } catch (Exception e) {
          //                e.printStackTrace();
          //                responseCode=-1;
          //            }
        }
        .......
在活动中:

       public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          String json="{\"code\":\"0\",\"url_tag\":\"http://good.url.com\"}";
          URLContainer container = new URLContainer(json);
          container.setWithJSON(json);   
          Log.e("adsads",""+container.getUrl());
       }
这会奏效的

        .......
        public Container(String fromJSON){
          _object_id=new Random().nextInt();
          //            try {
          //                setWithJSON(fromJSON);
          //            } catch (Exception e) {
          //                e.printStackTrace();
          //                responseCode=-1;
          //            }
        }
        .......
在活动中:

       public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          String json="{\"code\":\"0\",\"url_tag\":\"http://good.url.com\"}";
          URLContainer container = new URLContainer(json);
          container.setWithJSON(json);   
          Log.e("adsads",""+container.getUrl());
       }

这是因为你的
super(fromJSON)。发生的是

  • 调用URLContainer的构造函数
  • 调用容器的构造函数
  • 调用URLContainer的
    setWithJSON(字符串输入)
    /\uURL在返回的JSON对象中设置为所需的值
  • 在新创建的JSON对象中未设置对容器构造函数/\u url的调用

创建URLContainer实例后,只需在该实例上调用
setWithJSON(字符串输入)

这是因为您的
super(fromJSON)。发生的是

  • 调用URLContainer的构造函数
  • 调用容器的构造函数
  • 调用URLContainer的
    setWithJSON(字符串输入)
    /\uURL在返回的JSON对象中设置为所需的值
  • 在新创建的JSON对象中未设置对容器构造函数/\u url的调用

创建URLContainer实例后,只需在该实例上调用
setWithJSON(字符串输入)

有什么奇怪的?预期行为是什么?预期行为应始终为url=“http://good.url.com”。不是吗?这和我的问题是一样的:什么是奇怪的?预期行为是什么?预期行为应始终为url=“http://good.url.com”。不是吗?这和我的问题一样:是的,但我想知道为什么它不起作用。谢谢你的回答,我的英语很差。检查URLContainer的创建-首先在名为setWithJson(重写)的容器的构造函数中创建容器,设置_url…,在构造函数contenner完成后-开始URLContainer的初始化字段-您有_url=“default_url”是的,但我想知道为什么它不起作用。谢谢你的回答,我的英语很差。检查URLContainer的创建-首先在名为setWithJson(重写)的容器构造函数中创建容器,设置_url…,在构造函数上下文完成后-开始URLContainer的初始化字段-并且您有_url=“default_url”