當前位置:首頁 » 安卓系統 » android超時異常

android超時異常

發布時間: 2023-05-12 01:18:06

A. android跳轉http連接超時原因

網路請求超如租時。Android是一種啟陵基於Linux內核的自由及開放源代碼的操作系統渣旁兆,http是互聯網上應用最為廣泛的一種網路協議。android跳轉http連接超時原因是網路請求超時。只需重新啟動網路即可。

B. android中http get請求總是超時怎麼辦

檢查網路,查看是否有許可權,httpclient框架實現示例代碼:
1. GET 方式傳遞參數
//先將參數放入List,再對參數進行URL編碼
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "數據")); //增加參數1
params.add(new BasicNameValuePair("param2", "value2"));//增加參數2
String param = URLEncodedUtils.format(params, "UTF-8");//對參數編碼
String baseUrl = "伺服器介面完整URL";
HttpGet getMethod = new HttpGet(baseUrl + "?" + param);//將URL與參數拼接
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(getMethod); //發起GET請求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取伺服器響應內容
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

2. POST方式 方式傳遞參數
//和GET方式一樣,先將參數放入List
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));//增加參數1
params.add(new BasicNameValuePair("param2", "第二個參數"));//增加參數2
try {
HttpPost postMethod = new HttpPost(baseUrl);//創建一個post請求
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //執行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

C. Android BLE藍牙連接異常處理

藍牙通信過程中異常很常見,大致有以下幾種:

1,連接

2,發現服務

3,讀寫

4,通知

連接失敗可能是設備端原因,也可能是手機端原因。不同的手機來自不同的廠家,用的不同的晶元和藍牙協議棧都會導致藍牙功能的表現不一致,這都會導致各式各樣的兼容性問題,可能有的手機連接成功率高,有的成功率低。設備端原因可能有些時候出現異常導致死機無響應,或某些參數設置得有問題。但對於Android應用層開發來說,能做的很有限,藍牙通信是在系統服務進程中處理的,我們無法跨進程改變系統的行為,如果是在一個進程我們還可能通過Hook等手段來調整其內在邏輯。另外應用層的介面只是將請求封裝傳遞給系統服務進程,並未做一些實質性的通信,所以應用層雖然是同一個進程的,但是Hook意義也不大。所以我們能做的僅僅是看怎樣調整介面的調用,使得整體穩定性更好一點而已。

連接失敗分兩種,一種是超時,一種是提前返回失敗。

關於超時,一般是設備不在周圍,或設備斷電未發廣播,或設備當前被其他人連接。系統默認超時為30s,通常返回133,我們也可以自己設置更短的超時時間,超時則closeGatt,然後重新連接。

關於提前返回失敗,一般是有明確的異常,可能是手機藍牙的異常或者設備異常。

這兩種情況建議closeGatt,延時500ms,然後重試。如果重試三次仍然失敗,則可以考慮提示用戶重啟手機藍牙,或者檢查設備是否正常工作。

還有一種情況,連接成功後沒過多久連接又斷開了,這有可能是設備主動斷開,連接成功後有的設備會等待鑒權,如果一定時間內手機端還未發起鑒權則設備端主動斷開。也可能連接信道不夠穩定導致斷開的,此時closeGatt並重新連接即可。

當連接斷開時,會收到onConnectionStateChanged回調,這個回調可能會有一定延時,甚至有5s以上。解決的辦法是輪詢,如每隔1s發起一次讀請求,如果連接斷了會立即返回失敗。

如果藍牙連接不穩定,可以考慮關掉WIFI,因為WIFI通常和藍牙共用一個天線。

有的手機上discoverService可能會回調不止一次onServiceDiscover,這個要注意防禦。

當連接建立後,可以由設備端發起更改連接間隔,這樣能加快後續發現服務以及數據讀寫的速度。有的手機discover service很慢,原因是connect interval太大了,有的手機會主動向設備發起更改connect interval,而有的手機卻不會。這樣的話connect interval相差就會很大,實踐中發現有的手機是7ms,有的手機是默認的50ms,所以發現service都要8s,甚至20s的都很尋常,這對用戶來說是無法忍受的。所以比較好的辦法是設備主動發起更改connect interval,而Android系統是沒有提供對應API的。

如果發現服務失敗,通常來說不用closeGatt,重試一下就好了。如果重試三次還失敗,建議清一下緩存,再closeGatt,重新連接。

讀寫失敗要看失敗的原因是什麼,如果是許可權問題,則需要和設備端確認是否開放了相應的讀寫許可權。也可能是要讀寫的character不存在,可能是設備端修改了固件,手機端需要刷新一下藍牙緩存,closeGatt再重新連接。如果是其它未知錯誤,則重試三次,仍然失敗則closeGatt。不過通常來說如果是因為連接出了問題導致讀寫失敗的,會收到onConnectionStateChanged回調,此時就不用再無謂的重試了,直接closeGatt,重新連接。

打開/關閉character的notify,必須等收到onDescriptorWrite回調之後才算結束,才能開始下一個任務。

如果打開notify失敗,則可以改成周期性輪詢的方式去查詢character的值。

可參考該文章

Android-BLE-Issues

D. 安卓廣播超時的原因分析及優化建議

最終工作中經常碰到廣播超時的問題,於是花精力脊汪總結了一番,各位客官請看~

從圖中可以困野洞看出決定廣播B接受者的廣播接受是否超時,取汪枯決於廣播A處理的時間和廣播B處理的時間

E. android連接伺服器提示連接超時,報IOException ,求解大神哪裡有問題,之前還好好的,代碼沒有動過。

就是網路手兆連接喊叢失敗了,,,,,檢查網路是否通暢
在網鄭薯櫻絡通訊中,連接失敗是正常的事情,處理異常就是了

~~~~~~

F. android中如何獲取超時時長的異常

android獲取超時時長的異常方式如下:設置超時機制
client.getParams().setIntParameter(
HttpConnectionParams.SO_TIMEOUT, TIME_OUT_DELAY); // 超時設置
client.getParams().setIntParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, TIME_OUT_DELAY);// 連接超時
這里設置了兩種超時,第一種是請求超時,第二種時連接超時。
當向伺服器發出請求後,請求和伺服器建立socket連接,但是很長時間內都沒有建立socket連接,這就時第一種請求超時,這種情況主要發生在請求了
一個不存在的伺服器。超時之後,會拋出InterruptedIOException異常。
Timeout for blocking operations. The argument value is specified in
milliseconds. An InterruptedIOException is thrown if this timeout
expires.

G. android okhttp超時怎麼辦

OkHttp是一個在開發可汗學院AndroidAPP過程中非常重要的依賴庫。它的默認的配置為我們提供了非常重要實用功能,下面一些步驟我們可以讓Okhttp提供功能使用靈活和內省能力。1.啟用文件系統上的響應緩存默認情況下,Okhttp不支持響應緩存,包括HTTPCache-Control頭允許緩存響應。因此,客戶端通過一次又一次的請求相同的資源浪費時間和帶寬。而不是簡單地讀取初始響應後緩存的副本。要在文件系統中啟用響應緩存,需要配置com.squareup.okhttp.Cache實例,並把它傳遞給你的OkHttpClient實例的setCache方法。你必須初始化緩存與存放目錄的文件,並以位元組為單位的最大值。響應返回數據可以寫入給定目錄文件,如果一個響應的緩存超過了給定的大小。我們可以採取LRUpolicy。我們可以在stackoverflow查看JesseWilson的回復。我們可以通過context.getCacheDir()在子目錄中緩存我們的響應://Basedirectoryrecommendedby/q/4441849/400717.final@NullableFilebaseDir=context.getCacheDir();if(baseDir!=null){finalFilecacheDir=newFile(baseDir,"HttpResponseCache");okHttpClient.setCache(newCache(cacheDir,HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));}//Basedirectoryrecommendedby/q/4441849/400717.final@NullableFilebaseDir=context.getCacheDir();if(baseDir!=null){finalFilecacheDir=newFile(baseDir,"HttpResponseCache");okHttpClient.setCache(newCache(cacheDir,HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));}在可汗學院的程序中我們指定HTTP_RESPONSE_DISK_CACHE_MAX_SIZEas10*1024*1024,or10MB的大小2.集成StethoStetho是Facebook的一個可愛的庫,可以使用Chrome瀏覽器的Chrome開發人員工具功能來檢查你的Android應用程序。Stetho除了允許你檢查你的應用程序的SQLite資料庫,還可以查看View的層次結構。允許你檢查由OkHttp發起的每個請求和響應:這種自省機制是確保伺服器返回允許資源緩存的HTTP頭是非常有用的,以及驗證沒有請求時,保證緩存的資源存在。要想使用Stetho,只需添加一個StethoInterceptor實例的網路攔截器列表:okHttpClient.networkInterceptors().add(newStethoInterceptor());okHttpClient.networkInterceptors().add(newStethoInterceptor());然後,運行應用程序,打開瀏覽器後,輸入chrome://inspect。然後你就會看到應用程序的設備和標識符的列表。然後滑鼠右鍵選擇inspect打開開發者工具,然後打開新的tab,開始監控OkHttp請求。3.使用Picasso和Retrofit你可能使用過Picasso來載入網路圖片,或者使用Retrofit來簡化發出請求和解碼響應。這些第三方庫將隱式地創建自己的OkHttpClient供內部使用,如果你不明確指定一個。Picassoversion2.5.2的OkHttpDownloader類:(){OkHttpClientclient=newOkHttpClient();client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);returnclient;}(){OkHttpClientclient=newOkHttpClient();client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);returnclient;}Retrofit也有類似的工廠方法來創建自己的OkHttpClient。圖片一般在應用程序中需要載入的比較大的資源。盡管Picasso自己維護它的LRU機制來緩存圖片,在內存中嚴格執行。如果客戶端嘗試使用Picasso來載入圖片。Picasso會找不到其在內存中緩存圖像,然後將委託載入該圖片到它的內部OkHttpClient實例。並且默認情況下該實例將始終從伺服器載入圖片資源。作為defaultOkHttpClient的方法不能與上面提到的文件系統中的響應緩存配置結合起來。指定你自己的OkHttpClient實例允許返回數據從文件系統緩存響應,圖片不會從伺服器載入。這是非常重要的在程序第一次啟動以後。這個時候Picasso的內存緩存是冷的。所以它會頻繁的委託OkHttpClient實例去載入圖片。這就需要構建配置了您Picasso的OkHttpClient實例,如果你在你的代碼中使用Picasso.with(context).load()Picasso.with(context).load()載入圖片,你是用的是Picasso的單例模式。這是通過with方法懶漢模式地實例化並配置自己的OkHttpClient。因此,我們必須使我們自己的Picasso實例在單例之前通過wiht方法調用。實現這個,可以簡單的將OkHttpClient實例封裝在OkHttpDownloader中,然後傳遞給Picasso.Builder實例的downloader方法。finalPicassopicasso=newPicasso.Builder(context).downloader(newOkHttpDownloader(okHttpClient)).build();//,butreplacethesingleton//instancejustincase.Picasso.setSingletonInstance(picasso);finalPicassopicasso=newPicasso.Builder(context).downloader(newOkHttpDownloader(okHttpClient)).build();//,butreplacethesingleton//instancejustincase.Picasso.setSingletonInstance(picasso);在Retrofit中要使用OkHttpClient實例,需要改造1.9.x的一個RestAdapter,需要將OkHttpClient封裝OkClient的實例中。然後把它傳遞給RestAdapter.Builder實例的setClient方法。restAdapterBuilder.setClient(newOkClient(httpClient));restAdapterBuilder.setClient(newOkClient(httpClient));在Retrofit2.0中只需要簡單的將OkHttpClient傳遞給Retrofit.Builder實例的client方法。在可汗學院的APP中我們通過Dagger依賴注入來確保我們只有一個OkHttpClient的實例。這種方法同樣也適用於Picasso和Retrofit我們提供了一個為OkHttpClient實例提供單例模式的註解示例:@Provides@(finalContextcontext,){finalOkHttpClientokHttpClient=newOkHttpClient();configureClient(okHttpClient,);returnokHttpClient;}@Provides@(finalContextcontext,){finalOkHttpClientokHttpClient=newOkHttpClient();configureClient(okHttpClient,);returnokHttpClient;}OkHttpClient將會通過Dagger的註解創建一個實例提供給我們的Picasso和Retrofit。4.指定一個用戶代理攔截器日誌文件和分析為我們提供了有用的信息,當客戶在每個請求提供詳細的User-Agentheader值的時候。默認情況下,Okhttp包含User-Agent值只有在特定的Okhttp版本中。為了指定我們自己的useragent。首先創建攔截器的替換值,我們可以看stackoverflow的建議。{privatestaticfinalStringUSER_AGENT_HEADER_NAME="User-Agent";;publicUserAgentInterceptor(StringuserAgentHeaderValue){this.userAgentHeaderValue=Preconditions.checkNotNull(userAgentHeaderValue);}@(Chainchain)throwsIOException{finalRequestoriginalRequest=chain.request();=originalRequest.newBuilder().removeHeader(USER_AGENT_HEADER_NAME).addHeader(USER_AGENT_HEADER_NAME,userAgentHeaderValue).build();returnchain.proceed(requestWithUserAgent);}}{privatestaticfinalStringUSER_AGENT_HEADER_NAME="User-Agent";;publicUserAgentInterceptor(StringuserAgentHeaderValue){this.userAgentHeaderValue=Preconditions.checkNotNull(userAgentHeaderValue);}@(Chainchain)throwsIOException{finalRequestoriginalRequest=chain.request();=originalRequest.newBuilder().removeHeader(USER_AGENT_HEADER_NAME).addHeader(USER_AGENT_HEADER_NAME,userAgentHeaderValue).build();returnchain.proceed(requestWithUserAgent);}}為了創建User-Agentheader值人然後傳遞給UserAgentInterceptor的構造器,使用你得到的任何信息。我們可以使用:android的系統信息可以清晰的傳遞出這是一台android設備Build.MODEL或者「製造商提供的用戶可見最終可見的名稱」Build.BRAND或者「消費者可見的品牌與產品/硬體相關信息」Build.VERSION.SDK_INT或者「消費者可見的Android提供的SDK版本號」BuildConfig.APPLICATION_IDBuildConfig.VERSION_NAMEBuildConfig.VERSION_CODE最後三個值由的applicationID,VERSIONCODE和VERSIONNAME的值在我們的Gradlebuild腳本中了解信息可以查看versioningyourapplications和請注意,如果您的應用程序使用的是WebView,您可以配置使用相同的User-Agentheader值,你可以通過下面方法創建UserAgentInterceptor:WebSettingssettings=webView.getSettings();settings.setUserAgentString(userAgentHeaderValue);WebSettingssettings=webView.getSettings();settings.setUserAgentString(userAgentHeaderValue);5.指定合理的超時2.5.0版本之前,OkHttp請求默認為永不超時。2.5.0版本開始如果建立連接請求超時,如果從連接讀取下一個位元組或寫入的下一個位元組到連接,花費超過10秒,就終止。這樣做需要更新到2.5.0版本我們就不需要在我們的代碼中修改bug。原因很簡單是我因為我們第一次使用的時候使用了錯誤的路徑。要覆蓋這些默認值,可以分別調用setConnectTimeout,setReadTimeout或setWriteTimeout。需要注意的是Picasso和Retrofit為OkHttpClient實例指定不同的超時值時,默認情況下,Picasso指定:連接超過15秒.讀取超過20秒寫入超過20秒而Retrofit指定:連接超過15秒.讀取超過20秒沒有寫入超時通過配置Picasso和Retrofit自己的OkHttpClient實例你可以確保所有的請求超時是一致的

H. android版本的app在wifi下請求伺服器會超時,但3G、4G下不會

1、首先我們就須要看看在蘋果手機里的設置蜂窩移動網路有沒有打開來,無法連接到itunesstore時,可能是手機中移動數據沒有打開起來而導致無法正常連接到網路。

2、打開蘋果手機裡面的設置,進入到蜂窩移動網路

3、把蜂窩移動數據打開起來,然後看看登陸你的Apple ID看看

方法、步驟二:

1、也有可能是手機裡面網路設置問題導致的,打開蘋果手機設置進入通用裡面。

2、按一下還原、還原網路設置

方法、步驟三:

Apple ID的問題,建議更換一下你登陸的Apple ID,通常在注冊Apple
ID時,一些信息沒有填寫完整也會導致蘋果手機無法連接到itunesstore,重新注冊一個Apple ID或者使用別人的Apple ID登陸看看。

I. android友盟一鍵登錄一直報超時

Android友盟一慧薯侍鍵登錄超時的問題可能是由於網路原因或者友盟伺服器出現故障導致的。首先,您可以檢查一下自己的網路狀況,確保網路正常。其次,您可以檢查一下友盟伺服器的狀態,確保友盟伺服器正常運行。最後,您可以嘗試重新安前吵裝友盟的SDK,以確保SDK的正確安裝。如果以上方法都無法解決您的問題,建議您可以聯系友盟客服,他們手哪會更加專業地幫助您解決問題。

J. 安卓軟體啟動時提示「網路請求超時!"是怎麼回事請問高手要如何解決

我也試過這種情況,後來軟體開發者在新版本中說:這種情況是軟體的缺陷,也就是拆伏所謂旅手攜的BUG,等待新版本的解決吧。有些軟體的網路識別是很差的。薯李

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:945
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372