我试图将localhost(wamp服务器)上的文本文件的内容作为字符串返回。我可以读取文本文件,但我无法返回一个字符串,因为Runnable的函数运行是一个void。我正在使用Android Studio(这就是我使用线程的原因)。
book.id
答案 0 :(得分:0)
通常,Volley库比原始Thread更受欢迎。或AsyncTask
但我无法返回一个字符串,因为Runnable的函数运行是一个空白
但是,您可以将结果传递给新方法。
定义界面
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
}
});
答案 1 :(得分:0)
推进Cricket答案,我通常创建一个AsyncTask,在其中我定义了一个回调接口。 执行此任务的活动应实现此接口。 作为部分代码的示例:
公共类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);
}
}
希望它有所帮助。