Java 返回本地主机上文本文件的内容

Java 返回本地主机上文本文件的内容,java,android,runnable,Java,Android,Runnable,我试图以字符串形式返回localhost(wamp服务器)上文本文件的内容。我可以读取文本文件,但无法返回字符串,因为Runnable的函数run是空的。我在安卓工作室工作(这就是为什么我使用线程) 通常,凌空库比原始线程更可取。或异步任务 但是我不能返回字符串,因为Runnable的函数run是空的 不过,您可以将结果传递给新方法 定义接口 public interface ServerResponse { void onResponse(String msg); } 添加一个参数

我试图以字符串形式返回localhost(wamp服务器)上文本文件的内容。我可以读取文本文件,但无法返回字符串,因为Runnable的函数run是空的。我在安卓工作室工作(这就是为什么我使用线程)


通常,凌空库比原始线程更可取。或异步任务

但是我不能返回字符串,因为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);
}