当我想使用URLConnection
类型的变量时,我遇到了问题。
这是我的connectToServer()
方法:
private int connectToServer(){
try {
URL u = new URL("http://192.168.1.121:5000/");
URLConnection con = u.openConnection();
con.setDoOutput(true);
}catch (IOException e){
e.printStackTrace();
}
return 1;
}
我想在con
方法中使用变量sendToServer()
,这里是代码:
public String sendToServer(String data){
try {
OutputStreamWriter streamWriter = new OutputStreamWriter(con.getOutputStream());
streamWriter.write(data);
waktu_kirim = GetUTCdatetimeAsString();
streamWriter.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
Log.d("RESPONSE", sb.toString());
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
但是我得到了错误结果,告诉con
变量为空。如何使用与服务器保持连接的变量con
?
答案 0 :(得分:0)
con
是方法connectToServer()
中的局部变量。如果您想在connectToServer()
中使用变量的值(在sendToServer()
中初始化之后),则必须在从前者调用后者时传递它。因此,您必须从sendToServer()
致电connectToServer()
。
private int connectToServer(){
/* initialize con */
URL u = new URL("http://192.168.1.121:5000/");
URLConnection con = u.openConnection();
con.setDoOutput(true);
...
sendToServer(some_string, con);
return 1;
}
...
public String sendToServer(String s, URLConnection con){
//here, con is same as the con in connectToServer()
}
你通常如何使用另一种方法中的变量。但是,如果由于某些原因无法从sendToServer()
调用connectToServer()
,则可以在类中使用全局实例变量,首先在connectToServer()
中初始化它,然后在sendToServer()
中使用它}。
import java.net.*;
class Myclass{
public URLConnection con;
private int connectToServer(){ //this should be called before
//sendToServer()
/* initialize con here */
URL u = new URL("http://192.168.1.121:5000/");
con = u.openConnection();
con.setDoOutput(true);
}
public String sendToServer(String s){
//now use con here
}
}
答案 1 :(得分:0)
当我想使用
(Empty)
类型的变量时,我遇到了问题。
你的问题是你有两个这样的变量。
URLConnection
这是其中之一。它是一个方法局部变量,你没有返回它,所以它一旦超出范围就会消失。
URLConnection con = u.openConnection();
这就是它超出范围的地方。返回一个常数 return 1;
的点逃脱了我。更改方法及其签名以返回1
。
我想在
中使用变量con
方法con
但你不是。你宣布并使用另一个。
sendToServer()
在这里,无论 BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
是什么,都不是在前一种方法中声明和初始化的con
。
但我收到错误结果,告诉
con
变量为空。
我同意。它是空的。你从未将它从null改变。
如何使用与服务器保持连接的变量
con
?
使用在第一种方法中创建的那个。但事实上你应该删除第一种方法,并在每次需要时通过类似的方法创建一个新的con
。您明确的目标是连接到服务器一次,并为多个请求重新使用此连接是不可能的;鉴于HttpURLConnection
在幕后进行连接汇集,它甚至不是必需的。