xUtils3 詳解大全及Demo
阿新 • • 發佈:2019-01-31
/** * 自定義實體引數類請參考: * 請求註解 {@link org.xutils.http.annotation.HttpRequest} * 請求註解處理模板介面 {@link org.xutils.http.app.ParamsBuilder} * * 需要自定義型別作為callback的泛型時, 參考: * 響應註解 {@link org.xutils.http.annotation.HttpResponse} * 響應註解處理模板介面 {@link org.xutils.http.app.ResponseParser} * * 示例: 檢視 org.xutils.sample.http 包裡的程式碼*/ BaiduParams params = new BaiduParams(); params.wd = "xUtils"; // 有上傳檔案時使用multipart表單, 否則上傳原始檔案流. // params.setMultipart(true); // 上傳檔案方式 1 // params.uploadFile = new File("/sdcard/test.txt"); // 上傳檔案方式 2 // params.addBodyParameter("uploadFile", new File("/sdcard/test.txt")); Callback.Cancelable cancelable =x.http().get(params, /** * 1. callback的泛型: * callback引數預設支援的泛型型別參見{@link org.xutils.http.loader.LoaderFactory}, * 例如: 指定泛型為File則可實現檔案下載, 使用params.setSaveFilePath(path)指定檔案儲存的全路徑. * 預設支援斷點續傳(採用了檔案鎖和尾端校驗續傳檔案的一致性). * 其他常用型別可以自己在LoaderFactory中註冊, * 也可以使用{@link org.xutils.http.annotation.HttpResponse}* 將註解HttpResponse加到自定義返回值型別上, 實現自定義ResponseParser介面來統一轉換. * 如果返回值是json形式, 那麼利用第三方的json工具將十分容易定義自己的ResponseParser. * 如示例程式碼{@link org.xutils.sample.http.BaiduResponse}, 可直接使用BaiduResponse作為 * callback的泛型. * * 2. callback的組合: * 可以用基類或介面組合個種類的Callback, 見{@link org.xutils.common.Callback}. * 例如: * a. 組合使用CacheCallback將使請求檢測快取或將結果存入快取(僅GET請求生效). * b. 組合使用PrepareCallback的prepare方法將為callback提供一次後臺執行耗時任務的機會, * 然後將結果給onCache或onSuccess. * c. 組合使用ProgressCallback將提供進度回撥. * ...(可參考{@link org.xutils.image.ImageLoader} * 或 示例程式碼中的 {@link org.xutils.sample.download.DownloadCallback}) * * 3. 請求過程攔截或記錄日誌: 參考 {@link org.xutils.http.app.RequestTracker} * * 4. 請求Header獲取: 參考 {@link org.xutils.http.app.RequestInterceptListener} * * 5. 其他(執行緒池, 超時, 重定向, 重試, 代理等): 參考 {@link org.xutils.http.RequestParams} * **/ new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Toast.makeText(x.app(), result, Toast.LENGTH_LONG).show(); } @Override public void onError(Throwable ex, boolean isOnCallback) { //Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show(); if (ex instanceof HttpException) { // 網路錯誤 HttpException httpEx = (HttpException) ex; int responseCode = httpEx.getCode(); String responseMsg = httpEx.getMessage(); String errorResult = httpEx.getResult(); // ... } else { // 其他錯誤 // ... } Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show(); } @Override public void onCancelled(CancelledException cex) { Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show(); } @Override public void onFinished() { } }); // cancelable.cancel(); // 取消請求