我试图使用JSoup解析一些数据,这一切都发生在我的MainActivity的asynctask(doInBackground)部分。 不幸的是,当我执行应用程序时,所有元素(9)都是空的。
当我在代码行下面调试时,我实际上得到了完整网站,它就在那里。 方法 readMultipleLinesRespone()位于另一个类 HttpUtility 中,我也调用了Post和Get请求。
我通过将网站保存为文件并使用JSoups 资产功能来预先测试此功能,然后它完美运行。
onPostExecute 中的 setupAdapter()方法使用数据填充ExpandableListview,如果此信息为nessecary。如果您需要更多信息,请询问。
有人可以协助并告诉我我做错了吗?
response1 = util.readMultipleLinesRespone(); < ---已调试,所有数据(似乎)都在那里,但不是。
修改:如果我打印response1,确实要解析无数据。 Logcat输出:
E / Resonse :: [Ljava.lang.String; @ 3d3410a
以下是来自HttpUtility类的方法readMultipleLinesRespone:
public String[] readMultipleLinesRespone() throws IOException { InputStream inputStream = null; if (httpConn != null) { inputStream = httpConn.getInputStream(); } else { throw new IOException("Connection is not established."); } BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); List<String> response = new ArrayList<String>(); String line = ""; while ((line = reader.readLine()) != null) { response.add(line); } reader.close(); return (String[]) response.toArray(new String[0]); }
asynctask,它所有的hapening:
private class FetchWebsiteData extends AsyncTask<Void, Void, Void> { ProgressDialog mProgressDialog; @Override protected void onPreExecute() { this.mProgressDialog = new ProgressDialog(getActivity()); mProgressDialog.setMessage("Laden..."); mProgressDialog.setIndeterminate(false); mProgressDialog.show(); } @Override protected Void doInBackground(Void... result) { try { util.sendGetRequest("https://mobile.somesite.nl/Data", null); response1 = util.readMultipleLinesRespone(); } catch (IOException e) { e.printStackTrace(); } if (response1.length > 0) { Document doc = Jsoup.parse(response1.toString()); // Get the html document title Elements els = doc.select("span[class=item-value pull-right]"); if (els.size() > 0) { fac_naam = els.get(0).text(); fac_straat = els.get(1).text(); fac_post = els.get(2).text(); con_tel = els.get(3).text(); con_email = els.get(4).text(); betaal_reknr = els.get(5).text(); betaal_houd = els.get(6).text(); zig_gebruiker = els.get(7).text(); zig_wacht = els.get(8).text(); } } return null; } @Override protected void onPostExecute(Void result) { super.onPreExecute(); setupAdapter(); mProgressDialog.dismiss(); } }
答案 0 :(得分:1)
与此同时,我解决了这个问题。 我没有正确地将响应字符串传递给解析所需元素的asynctask。 只需要一个公共字符串,其中设置和传递响应(不是一种优雅的方式,但它可以工作):
public static String HttpResponse = "";
在HttpUtility类中:
public String[] readMultipleLinesRespone() throws IOException {
...
TabFragment1.HttpResponse = response.toString();
...
return (String[]) response.toArray(new String[0]);
}
然后将其传递给asynctask:
@Override
protected Void doInBackground(Void... result) {
try {
util.sendGetRequest(LoginActivity.PersData_URL, null);
util.readMultipleLinesRespone();
} catch (IOException e) {
e.printStackTrace();
}
if (HttpResponse.length() > 0) {
Document doc = Jsoup.parse(HttpResponse.toString());
// Get the html document title
Elements els = doc.select("span[class=item-value pull-right]");
...
}
return null;
}