根据我的下面的代码,当我调试并且我到达me
(jurl实例)中调用con.setRequestMethod(method)
的位置时,变量选项卡首先显示:
Name Value
----------- ----------------------------------------
this jurl (id=128)
-con HttpsURLConnectionImpl (id=129)
-method "GET" (id=116)
method "POST" (id=118)
furl "https://www.someurl.com/login" (id=117)
如果我要正确理解,那么,con.setRequestMethod("POST")
不应该从" GET"更改this.con.method(id 116)到" POST"?因为它不是。一旦调试通过con.setRequestMethod(method)
,this.con.method仍然会说" GET"。所以要么我在这里遗漏了一些东西,要么对Eclipse的变量跟踪器进行了窃听。
View.java
public Class View {
private AccountManager accountManager = new AccountManager(this);
private void login() {
String username = textuser.getText();
String password = textpass.getText();
String locid = getLocId();
Hashtable result = null;
result = accountManager.login(username, password, locid);
}
}
AccountManager.java
public class AccountManager {
public View Parent = null;
private String USERNAME = null;
private String PASSWORD = null;
private String locid = null;
public View Parent = null;
public AccountManager(View view) {
this.Parent=view;
this._locationAssistant = l;
}
public Hashtable login(String username, String password, String locid) {
final String USERNAME = username;
final String PASSWORD = password;
this.USERNAME = username;
this.PASSWORD = password;
Hashtable result = new Hashtable();
URLVisitor vis = new URLVisitor();
vis.setURL("https://www.someurl.com/login");
vis.setMethod("POST");
vis.execute();
}
}
URLVisitor.java
public class URLVisitor {
private String method= "GET";
private String url;
public jurl me = null;
public URLVisitor() {
}
public void setURL(String url) {
this.url = url;
}
public void setMethod(String method) {
this.method = method;
}
public void execute() {
me = new jurl(this.method, this.url);
}
}
jurl.java
public class jurl {
private URL url;
private HttpURLConnection con = null;
public jurl(String method, String furl) {
try {
url new URL(furl);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod(method);
}
}
}
答案 0 :(得分:1)
我找到了。创建原始HttpURLConnection con
后,con.method
的默认值为"GET"
。但是,当con.setRequestMethod
被调用me
时,它是在已经运行的vis
实例化中创建的实例化,它的con.setRequestMethod("POST")
没有反映在vis.me.con.method
,而是vis.me.con.delegate.method
中的一个级别。
答案 1 :(得分:0)
一旦调试通过con.setRequestMethod(方法),this.con.method仍然会说“GET”。
在setRequestMethod
调用返回之后,您才能期望该字段更改。听起来像调试器正常/正确地运行。
我也可能误解了你,并且你真的看到了该领域的陈旧价值。尝试让调试器从字段中重新获取值。
但这不应该影响代码实际行为的方式,无论是否从调试器运行代码。
最后,请注意您的代码实际上并未调用connect
或尝试查看状态或内容,因此method
字段的状态是学术性的。它不会被使用......