我的问题是发送一个url请求,捕获结果,修改结果并在java应用程序的webview中显示它。 我有一个很大的应用程序,使用带有opengl的c ++代码用于“本机游戏”,并为不同的目标设备使用不同的前端构建。
在我的Android版本中,我想添加类似新闻页面的内容。为此,我有一个新闻服务器。我向我的服务器url发送请求(包含一个特定的slug用于平台版本,语言代码等)并以.json格式接收数据,我必须使用自己的标题,横幅,样式等格式化。
例如 - > urlRequest - > https://myserverip.com/news/?slug=android&language=de让我回复
{
"status": "success",
"data": {
"general":[
{
"news_id": "31",
"title": "The title of my news",
"text":"news Text.."
}
...
]
}
}
到目前为止,我有一个包含WebView成员的DialogFragment类。我玩过WebViewClient类,但最后我在显示结果之前无法捕获结果。 每当我看到WebView / WebViewClient的文档时,我都会寻找一个点,我可以偷偷摸摸获取网址结果。
有人可以帮助我用简单的代码解释这个网络技术,甚至可以帮助我解决我的问题吗?
答案 0 :(得分:0)
我发现我的方法是为了解决我的问题而复杂化(感谢MH。我指的是这个。)
相反,我通过HttpClient捕获URL请求,解析它并将其作为html字符串直接提供给视图。遗憾的是,这必须在一个单独的线程中完成(或使用外部java源,如Volly)
类NewsLoaderTask扩展了AsyncTask {
private WebView webView;
public void init(WebView _webView)
{
webView = _webView;
}
protected String doInBackground(String... urlStrings) {
try {
URI webUrl = new URI(urlStrings[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(new HttpGet(webUrl));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
String responseString = out.toString();
out.close();
return responseString;
} else{
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (Exception e)
{
Log.i("NewsFragment", "exepction: " + e.toString());
}
return "";
}
protected void onPostExecute(String result) {
// TODO parse my text
// The baseurl points to the path with the .css and as entry point for gfx
webView.loadDataWithBaseURL("file:///android_asset/html/library/", outputString, "text/html; charset=utf-8", "UTF-8", null);
}
}
在我的WebView中,我创建一个NewsLoaderTask实例并使用我的webview作为参数进行初始化(用于显示文本)
NewsLoaderTask newsloaderTask = new NewsLoaderTask();
newsloaderTask.init(webView);
newsloaderTask.execute(getArguments().getString("url"));