這是交易。在我的Android應用程序中,我正在使用Jsoup進行一些網頁拼寫。現在它工作正常,但它太慢了。我在我的代碼中做的是:Android HTML Jsoup解析速度
- 在Jsoup中通過POST方法登錄到頁面;
- 獲取cookies;
- 通過重複使用cookie,我正在瀏覽6頁(POST和GET)並且抓取它們(主要是表格和大量的行,我的意思是LOTS ...所以,真的很多foreach循環);
- 將所有需要的數據寫入SQLiteDatabase;
現在的問題是,它在吸收速度。我的意思是,在按下登錄按鈕之後,應用程序的登錄屏幕中,用戶必須在3G中等待10秒,並在WiFi中等待8-10秒(取決於WiFi速度)。當他試圖檢查數據更新時,它會執行相同的算法+比較SQLiteDatabase表數據。
那麼,有沒有其他的方法來做這個HTML解析 - 刮在android的東西,使其更快?附:我不能傷心地訪問數據庫。
編輯:
既然你問我刮的內容,這裏是你可以不登錄訪問幾頁的一個例子(它是不是真的比別人大表): https://medeine.vgtu.lt/programos/programa.jsp?sid=F&fak=5&prog=87&rus=U&klb=en。現在
,對於代碼...我真的不能給你全部的代碼,但這裏是我應得的表格的每個單元的例子:
document = Jsoup.connect(getContext().getString(R.string.url))
.cookie("JSESSIONID", cookie)
.get();
Element table = document.select("table.duomenys").first();
if (table != null) {
databaseHandler.openDatabase();
databaseHandler.getDatabase().beginTransaction();
try {
for (Element row : table.select("tr.n, tr.l") {
Elements columns = row.select("td");
addItem(columns, DatabaseHandler.getTableName());
}
databaseHandler.getDatabase().setTransactionSuccessful();
} finally {
databaseHandler.getDatabase().endTransaction();
}
databaseHandler.closeDatabase();
}
這裏是的addItem( )方法示例:
private void addItem(Elements columns, String tableName) {
databaseHandler.addItem(new Item(
columns.get(0).text(),
columns.get(1).text(),
columns.get(3).text(),
columns.get(4).text()
), tableName);
}
而這只是一個頁面。其中有6個,其中很少有很多。當然,這是在AsyncTaskLoader的loadInBackground()方法內完成的。
編輯2:
Connection.Response response = Jsoup.connect("https://medeine.vgtu.lt/studentams/submit.jsp")
.data("studKnNr", id, "asmKodas", password)
.timeout(3000)
.method(Connection.Method.POST)
.execute();
String cookie = response.cookie("JSESSIONID");
Document document = Jsoup.connect(modules_url)
.cookie(cookie_id, cookie)
.get();
當我想想......可能是因爲未解析速度很慢,但登錄,並通過6頁重定向並在這種情況下,我可以做什麼?現在我注意到通過Connection.Response中的.execute()向服務器發送POST並獲取cookie需要約2.5秒。
'寫入所有需要的數據,以SQLiteDatabase''我沒有訪問database'選擇的答案???? – greenapps 2014-08-27 22:12:37
我正在將下載的數據寫入我自己的SQLiteDatabase。由於無法訪問我的意思是我無法訪問該網站的數據庫,所以我必須抓取網站。 很清楚,我在刮大學信息系統網站,但他們還沒有授予他們數據庫的訪問權限。 – env 2014-08-27 22:24:40
如果你的代碼要慢,那麼你應該在這裏發佈你的代碼,並在互聯網上放置一個頁面,所以我們不必登錄,但可以做一些測試。 – greenapps 2014-08-27 23:22:09