我正在開發我的第一個應用程序,並且我創建了以下連接到遠程URL的方法,獲取JSON文件並將其寫入本地SQLite數據庫。有時會發生互聯網連接緩慢或不良,我會設置一個計時器。例如,如果3秒後它不會得到JSON文件,我會拋出AlertDialog讓用戶選擇是否重試或取消。那麼如何給我的函數添加超時?如何在Android中添加HttpClient請求和連接超時
public int storeData(Database db, int num) throws JSONException {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://www.example.com/file.json");
request.addHeader("Cache-Control", "no-cache");
long id = -1;
try {
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStreamReader in = new InputStreamReader(entity.getContent());
BufferedReader reader = new BufferedReader(in);
StringBuilder stringBuilder = new StringBuilder();
String line = "";
while ((line=reader.readLine()) != null) {
stringBuilder.append(line);
}
JSONArray jsonArray = new JSONArray(stringBuilder.toString());
SQLiteDatabase dbWrite = db.getWritableDatabase();
ContentValues values = new ContentValues();
if (jsonArray.length() == num && num != 0)
return num;
SQLiteDatabase dbread = db.getReadableDatabase();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jObj = (JSONObject) jsonArray.getJSONObject(i);
values.put("id", jObj.optString("id").toString());
values.put("name", jObj.optString("firstname").toString());
values.put("surname",jObj.optString("lastname").toString());
id = dbWrite.insert("users", null, values);
}
num = jsonArray.length();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (id > 0)
return num;
else
return -1;
}
@ashoke大型傳輸比其他任何類型的傳輸都更不可能。一些新數據在每次讀取的超時時間內到達,否則不會。但是,這個單一的陳述是唯一錯誤的,否則你的優秀和正確的答案。我已投票拒絕刪除它。 – EJP 2014-10-10 23:21:25
我還沒有解決...我會再次看到你的答案...如何做到這一點? – smartmouse 2014-10-11 07:52:37
@EJP我只是指出我們需要一種方式來取消大型轉移中。 'smartmouse',我沒有刪除看到下面 – ashoke 2014-10-11 18:44:28