gpt4 book ai didi

javascript - 在带有服务器通信的android webview中首次单击时无法获取数据

转载 作者:行者123 更新时间:2023-12-03 09:56:57 24 4
gpt4 key购买 nike

我从 JavaScript 调用此方法。
这是第一次,它给出了 null。但从第二次开始,数据就来了。
请帮助我。

@SuppressLint("JavascriptInterface")
public String loadClickedData() {

pDialog = ProgressDialog.show(this, "dialog title",
"dialog message", true);
new HttpAsyncTaskClickedData()
.execute("http://192.168.0.9/btrepo/btrepo/android_api.php");
return bdb.getmPosIdData();
}

这里我们通过Android中的AsyncTask获取数据:

private class HttpAsyncTaskClickedData extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("tag", "get_pos_details"));
nameValuePairs.add(new BasicNameValuePair("pos_id", posId));
return GET(urls[0], nameValuePairs);
}

// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
// Toast.makeText(getApplicationContext(), result+" in post ",
// Toast.LENGTH_LONG).show();
pDialog.dismiss();
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG)
.show();
bdb.setmPosIdData(result);

}
}

此方法用于从服务器获取数据:

public static String GET(String url, List<NameValuePair> pair) {
InputStream inputStream = null;
String result = "";
try {

// create HttpClient
HttpClient httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(pair));

HttpResponse httpResponse = httpClient.execute(httpPost);

// receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
is = inputStream;
// convert inputstream to string
if (inputStream != null) {
// jObj = convertIsToJson(inputStream);
result = convertIsToJson(inputStream) + " ";
// jSonStr = result;
} else
result = "Did not work!";

} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
}

return result;
}

我正在从服务器获取 json 字符串格式的数据。
它显示具有 null 值的属性,例如 {pos["posid":null, "storeName":null]} 等。

最佳答案

在下面的函数中

public String loadClickedData() {

pDialog = ProgressDialog.show(this, "dialog title",
"dialog message", true);
new HttpAsyncTaskClickedData()
.execute("http://192.168.0.9/btrepo/btrepo/android_api.php");
return bdb.getmPosIdData();
}

你执行你的HttpAsyncTaskClickedData() ,然后返回bdb.getmPosIdData()立即地。 (这永远是第一次出现的问题)

AsyncTask 的结果仅在 onPostExecute 中可用,您可以在其中调用 bdb.setmPosIdData(result);

@Override
protected void onPostExecute(String result) {
// ...
bdb.setmPosIdData(result); // result is only stored in bdb here!
}

HttpAsyncTaskClickedData 在后台运行,可能需要一些时间。
这就是为什么你的第一次调用总是无法获取数据,因为你返回 bdb.getmPosIdData() 执行 AsyncTask 后立即

关于javascript - 在带有服务器通信的android webview中首次单击时无法获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702131/

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