gpt4 book ai didi

java - 从函数库中的 Async 回调

转载 作者:行者123 更新时间:2023-11-30 09:41:10 27 4
gpt4 key购买 nike

我正在组装我的第一个 Android 应用程序,这也是我对 Java 编程语言的介绍,所以我在可能是一些非常基本的概念上磕磕绊绊。

我的计划是建立一个充满 php 函数的服务器,并将所有 php 调用放在一个静态函数库中。如果可以简化此问题,我可以将该静态类更改为单例。

在 Activity 中,我正在进行以下调用:

phpCalls.VerifyAccount(userName, password);

在 phpCalls 静态类中,我有以下代码:

    PHP_AsyncTask validateAccountTask = new PHP_AsyncTask();
validateAccountTask.execute(new String[] {DOMAIN + PHP_confirm_account_exists, username, password});

private static class PHP_AsyncTask extends AsyncTask<String, Void, String>{
//This class should take the full URL of the php function to call and return the string result. Somehow.
@Override
protected String doInBackground(String... args)
{
String response = "";

try
{
String url = args[0];
String username = args[1];
String password = args[2];
URL validateURL = new URL(url);
String credentials = "Basic " + new String(Base64.encode((username + ":" + password).getBytes(), Base64.NO_WRAP)) ;

//TODO: handle 501 result
HttpURLConnection conn = (HttpURLConnection)validateURL.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Authorization",credentials);

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;

while ((line = reader.readLine()) != null)
{
response += line;
}
reader.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}

return response;
}


@Override
protected void onPostExecute(String result)
{
//have something happen when the php returns - need to pass the result somewhere
}

抱歉,如果代码的格式不太理想 - 我不是 Stackoverflow 上的常客。

无论如何,我正在尝试确定如何最好地处理来自 php 调用的结果 - 它作为结果返回到 PHP_AsyncTask 类的 onPostExecute 函数,但我需要以某种方式将它传递回 UI 线程。显然我无法在 Activity 中创建指向函数的指针并将其传递给异步类。有没有办法在我的 Activity 中创建一个监听器并将其传递,以便我可以将 PHP_AsyncTask 的结果传回我的 Activity ?还是我完全找错了树 - 有没有我应该追求的更好的方法?

最佳答案

1) onPostExecute 在UI线程中

2) 您可以将指针传递给接口(interface),而不是指向函数的指针。比如你有这样的接口(interface)

public interface Listener{
public void someFunc(String response);
}

您可以将任何实现该接口(interface)的类作为参数传递。例如,如果您的方法是

public void sendRequest(Listener listener);

你可以作为监听器传递给你的类:

public class SomeClass implements Listener{
public void someFunc(String response){
//do stuff
}
}

那样

sendRequest(new SomeClass());

PS 我没有在我的回答中使用 AsyncTask,但我希望你能明白这一点

关于java - 从函数库中的 Async 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com