gpt4 book ai didi

java - 如何使用拆分的 "getData"和 "MainActivity"将 XML feed 数据加载到用户界面中,而不卡住 UI

转载 作者:行者123 更新时间:2023-12-01 10:33:36 26 4
gpt4 key购买 nike

我是 android 新手,在developer.android.com 上阅读了很多有关生命周期等的内容。现在我想构建一个从在线 XML feed 获取数据的应用程序。

我创建了一个 XmlManager 类,它扩展了 aSyncTask<...>在这里,我从 URL 下载 XML 并将其放入字符串中,这有效!

现在我将从 onCreate 中的主要 Activity 调用下载,以便它在后台下载 XML。用户需要看到一个 tekst、“正在加载”或其他东西(在 TextView 中)。当下载(aSync 进程)准备就绪时,它需要触发一个事件或其他内容并推送?/发送?将数据发送到 Activity ,以便 Activity 可以用 XMl 字符串替换加载文本。

当我知道如何做到这一点时,我可以自己找出如何解析 xml 并将其放入一个漂亮的用户界面中。我尝试实现this但我无法完成它。

有谁可以帮助我吗?示例代码会很好!

一个简单的用户界面(Textview 和按钮),当我单击按钮时,后台进程启动,下载 xml 并用 XML 替换 textview 中的当前文本,这太棒了!!!

我用于下载 XML 的代码是:

public class XmlManager extends AsyncTask<String, String, String> {
String xml = null;

@Override
protected String doInBackground(String... inputUrl) {
Log.i("Status", "ASync proces started");
getStream(inputUrl[0]);
Log.i("Status", "ASync proces finished");
return xml;
}

private void getStream(String urlString) {
URL url = null;
HttpURLConnection urlConnection = null;
InputStream is = null;

try {
url = new URL(urlString);

urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
Log.i("Status", "Connection opened");

BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
Log.i("Status", "XML loaded into string");

} catch (Exception e) {
Log.e("Error", e.getMessage().toString());
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
Log.i("Status", "Connection disconnected");
}
}
}
}

提前致谢!

最佳答案

您缺少的重要部分是(来自 Android docs ):

 protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}

您需要解析 XML 并将其添加到上述函数中的 UI 中。由于 onPostExecute 在 UI 线程上运行。

您可能需要将回调接口(interface)传递到 AsyncTask 构造函数中,以便能够将解析后的数据发送回您的 Activity

例如:

public class XmlManager extends AsyncTask<String, String, String> {
private MyCallback mCallback = null;

public XmlManager(MyCallback callback) {
mCallback = callback;
}

...

protected void onPostExecute(String result) {
mCallback.onResult(result);
}
}

关于java - 如何使用拆分的 "getData"和 "MainActivity"将 XML feed 数据加载到用户界面中,而不卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945436/

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