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

标签 javascript android html httpclient

我从 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/

相关文章:

javascript - 按下按钮后加载闪光灯

javascript - RSK 上的智能合约有没有办法在不使用预言机的情况下从比特币网络获取链上数据?

Android 支持 v4 SwipeRefreshLayout 空 View 问题

android - appcompat-v7 :23. 1.0 的 AppCompatDialogFragment 问题

javascript - 如何让 Bootstrap Scrollspy 使用 active li 类

javascript - 计算文本中的表格行标签

javascript - 向上或向下滚动后过渡固定 div 的顶部属性

java - Thread.interrupt() 不起作用

javascript - 使用 javascript 和 php 的 Svg 图像

javascript - JQuery 检查 localStorage 是否设置