Java 返回本地主机上文本文件的内容
我试图以字符串形式返回localhost(wamp服务器)上文本文件的内容。我可以读取文本文件,但无法返回字符串,因为Runnable的函数run是空的。我在安卓工作室工作(这就是为什么我使用线程)Java 返回本地主机上文本文件的内容,java,android,runnable,Java,Android,Runnable,我试图以字符串形式返回localhost(wamp服务器)上文本文件的内容。我可以读取文本文件,但无法返回字符串,因为Runnable的函数run是空的。我在安卓工作室工作(这就是为什么我使用线程) 通常,凌空库比原始线程更可取。或异步任务 但是我不能返回字符串,因为Runnable的函数run是空的 不过,您可以将结果传递给新方法 定义接口 public interface ServerResponse { void onResponse(String msg); } 添加一个参数
通常,凌空库比原始线程更可取。或异步任务 但是我不能返回字符串,因为Runnable的函数run是空的 不过,您可以将结果传递给新方法 定义接口
public interface ServerResponse {
void onResponse(String msg);
}
添加一个参数
public void serverToString(final ServerResponse callback)
{
String str;
Thread t = new Thread(new Runnable() {
public void run() {
try {
URL url = new URL("http://myIP/test.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
callback.onResponse(in.readLine()); // This is the 'return' now
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Throwable th) {
th.printStackTrace();
}
}
});
t.start();
}
而不是这个
String response = serverToString();
这样做
serverToString(new ServerResponse() {
@Override
public void onResponse(String response) {
// handle message
}
});
在板球回答之前,我通常创建一个异步任务,并在其中定义一个回调接口。 执行此任务的活动应实现此接口。 作为部分代码的示例: 公共类TeamUpdateTask扩展了AsyncTask、Object、TeamUpdateResponse>{
private TeamUpdateTaskCallback mListener;
@Override
public void onPostExecute (TeamUpdateResponse result) {
if (exception == null) {
mListener.OnTeamUpdateCompleted(result);
} else {
processException();
}
}
public void setListener (TeamUpdateTaskCallback listener) {
mListener = listener;
}
public interface TeamUpdateTaskCallback {
void OnTeamUpdateCompleted (TeamUpdateResponse response);
}
}
希望能有所帮助。你想要实现的目标是不可能的。您不能从异步方法返回任何参数。使用volley进行服务器调用,并在要使用该字符串的同一类中进行调用,您可以使用全局变量或setter传递值。我尝试了此方法,但它不起作用,因为我无法在run函数中使用回调(无法修改)。参数必须是最终的
serverToString(最终的ServerResponse
或者,您应该真正阅读有关网络的Android文档并使用Volley库
private TeamUpdateTaskCallback mListener;
@Override
public void onPostExecute (TeamUpdateResponse result) {
if (exception == null) {
mListener.OnTeamUpdateCompleted(result);
} else {
processException();
}
}
public void setListener (TeamUpdateTaskCallback listener) {
mListener = listener;
}
public interface TeamUpdateTaskCallback {
void OnTeamUpdateCompleted (TeamUpdateResponse response);
}