Java(Android)中带有heritance的奇怪错误日志
我正面临一个非常奇怪的错误,我无法解释,也许你可以帮助我: 我正在使用JSON,我有一个类用于将响应代码包装在JSON中,如{“code”:“0”}: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
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”