如何使用动态 URL 从 webview 获取 JSON?

Posted

技术标签:

【中文标题】如何使用动态 URL 从 webview 获取 JSON?【英文标题】:How to get JSON from webview with dynamic URL? 【发布时间】:2016-01-10 02:08:21 【问题描述】:

我需要从服务器响应中获取 JSON。 我使用 WebView.loadUrl() 并在正文中获取带有 JSON 的 html 页面作为响应。它显示在 webView 中,但我如何从代码中访问它?

更新:重要通知,我有动态网址。

【问题讨论】:

你为什么使用 WebView ? 是否有理由需要使用 WebView 显示页面?如果您直接使用HttpURLConnection 获取响应,则很容易从响应中获取 JSON。 我使用 webview 是因为我连接到请求我的应用程序 ID 的 api + 我需要先从中打开一个网页。 【参考方案1】:

我认为您不需要WebView。您必须使用 HTTP 客户端来请求服务器。

OkHttp 是一个不错的选择,或者您只能使用 android-Stuff,请查看 doc。

如果您真的想使用WebView,请查看此answer。

【讨论】:

感谢您的回答!我马上试试。另外,我可以使用改造来获取 JSON 吗? 是的,你可以。 JSON 只是一些文本。在您应该使用像 Google 的 GSON 一样轻松读取 JSON 的库之后,请参阅 ***.com/a/31743324/244702 由于我使用的是动态url,看来不能靠改造了。但是 javascript 方法效果很好,谢谢!【参考方案2】:

您可以向服务器发出请求,并通过 JSONObject(或任何它需要的)给它您的 APP ID。我很确定您不需要 WebView 来完成此操作。这是我用于类似操作的一些代码示例。在这里,我在 JSONObject 中存储了设备 ID 以及其他一些访问凭据。然后我将它传递给服务器以请求响应,然后我收到一个纯字符串格式的 JSON 响应。

//open connection to the server
URL url = new URL("your_url");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

//set request properties
httpURLConnection.setDoOutput(true); //defaults request method to POST
httpURLConnection.setDoInput(true);  //allow input to this HttpURLConnection
httpURLConnection.setRequestProperty("Content-Type", "application/json"); //header params
httpURLConnection.setRequestProperty("Accept", "application/json"); //header params
httpURLConnection.setFixedLengthStreamingMode(jsonToSend.toString().getBytes().length); //header param "content-length"

//open output stream and POST our JSON data to server
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream());
outputStreamWriter.write(jsonToSend.toString()); //whatever you're sending to the server
outputStreamWriter.flush(); //flush the stream when we're finished writing to make sure all bytes get to their destination

//prepare input buffer and get the http response from server
StringBuilder stringBuilder = new StringBuilder();
int responseCode = httpURLConnection.getResponseCode();

//Check to make sure we got a valid status response from the server,
//then get the server JSON response if we did.
if(responseCode == HttpURLConnection.HTTP_OK) 

    //read in each line of the response to the input buffer
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"utf-8"));
    String line;
    while ((line = bufferedReader.readLine()) != null) 
        stringBuilder.append(line).append("\n");
    

    //You've now got the JSON, which can be accessed just as a
    //String -- stringBuilder.toString() -- or converted to a JSONObject

    bufferedReader.close(); //close out the input stream

【讨论】:

以上是关于如何使用动态 URL 从 webview 获取 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

从 Android Webview 获取 POST 数据

如何在 Java 中使用 WebResourceRequest 获取 WebView 的 Url?

从 Swift 中的 textField 获取 Webview URL

将 URL 从 WebView 传递给 ShareActionProvider?

如何在 Android WebView 中使用 HitTestResult 获取链接 URL,用于使用 Longclick 链接图像(而不是图像 URL)

从通知中获取 url 并加载到 Fragment 的 webview 的最佳方法?