Android Http請求網路模擬超時
http://zhang247124629.iteye.com/blog/1490102
在Android平臺上,Http請求網路有可以設定連線超時的API(conn.setConnectTimeout),在J2ME平臺上就沒有該API了。於是小阿哥今天小模擬一下。閒話不說了。上程式碼。
Java程式碼- package com.aisidi.age.handler;
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
-
import
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- /**
- *
- * @author 小阿哥
- * @date 2012-04-19
- *
- * */
- public class Http {
- private static Http http;
- private HttpURLConnection conn;//連線。
- private boolean isResponse;//是否有響應。。
-
private boolean
- private int connectTimeout;//連線超時時間。
- private Http() {
- }
- public static Http getInstance() {
- if (http == null) {
- http = new Http();
- }
- return http;
- }
- /**
- * 根據URL獲得資料。位元組陣列。
- * */
-
public byte
- if(this.connectTimeout!=0)
- {
- this.startTimer();
- }
- byte contentArray[] = null;
- isResponse = false;
- isConnecting = true;
- try {
- URL httpUrl = new URL(Url);
- conn = (HttpURLConnection) httpUrl
- .openConnection();
- int responseCode = conn.getResponseCode();
- if (responseCode == HttpURLConnection.HTTP_OK) {
- contentArray = getByteArrayFromStream(conn.getInputStream());
- }
- httpUrl=null;
- } catch (Exception e) {
- Debug.println("getContentFromUrl Ex:" + e.toString());
- } finally {
- if (conn != null) {
- conn.disconnect();
- }
- }
- if (contentArray != null) {
- this.isResponse = true;
- }
- isConnecting = false;
- return contentArray;
- }
- /**
- * 根據URL獲得相應圖片。
- * */
- public Bitmap getBitmapFromUrl(String url)
- {
- Bitmap bit=null;
- byte file[]=getContentFromUrl(url);
- if(file!=null)
- {
- bit=BitmapFactory.decodeByteArray(file, 0,file.length);
- }
- return bit;
- }
- /**
- * 設定連線超時。
- * */
- public void setConnectTimeout(final int connectTimeout)
- {
- this.connectTimeout=connectTimeout;
- }
- /**
- * 啟動計時器執行緒.
- * */
- private void startTimer()
- {
- Runnable runnable=new Runnable() {
- boolean isRun=true;
- long startTime=System.currentTimeMillis();
- long enableTime;
- @Override
- public void run() {
- // TODO Auto-generated method stub
- System.out.println("計時器執行緒 run start..isRun:"+isRun);
- while(isRun)
- {
- enableTime=System.currentTimeMillis()-startTime;
- if(isResponse||enableTime>=Http.this.connectTimeout)
- {
- System.out.println("計時器執行緒result str:"+(isResponse?("已經下載完畢了"):("時間延遲太長了強制關閉")));
- isRun=false;
- closeCurrentConnection();
- break;
- }
- try{
- Thread.sleep(50);
- }catch (Exception e) {
- System.out.println("計時器執行緒 sleep ex:"+e.toString());
- }
- }
- System.out.println("計時器執行緒run..end time:"+enableTime);
- }
- };
- new Thread(runnable).start();
- }
- /**
- * 判斷當前連線是否正在連線中。。。。
- * */
- public boolean isConnecting() {
- return isConnecting;
- }
- /**
- * 關閉當前連線。
- * */
- public void closeCurrentConnection() {
- if (conn != null) {
- conn.disconnect();
- conn = null;
- }
- isResponse = false;
- isConnecting = false;
- }
- private byte[] getByteArrayFromStream(InputStream inputStream) {
- byte result[] = null;
- try {
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- byte buf[] = new byte[1024];
- int len;
- while ((len = inputStream.read(buf)) != -1) {
- outputStream.write(buf, 0, len);
- }
- outputStream.flush();
- result = outputStream.toByteArray();
- outputStream.close();
- outputStream = null;
- inputStream.close();
- } catch (Exception e) {
- Debug.println("getStreamByteArray().EX:" + e.toString());
- }
- return result;
- }
- }
以上程式碼是模擬連線超時的主要邏輯程式碼。親,上面的程式碼還有註釋喲,專門為你寫的。是不是很體貼啊。
Java程式碼- package com.aisidi.age.handler;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.view.KeyEvent;
- import android.view.View;
- import android.widget.Toast;
- /**
- *
- * @author 小阿哥
- * @date 2012-04-19
- *
- * */
- public class MyView extends View implements Runnable{
- private static final int CONNECTION_TIMEOUT = 800;
- private static final String URL_DOWN_LOAD="http://ww3.sinaimg.cn/large/979d743fjw1ds3igt92dkj.jpg";
- private static final String CONNECTING_TOAST="正在連網中。請稍候在試。。";
- private Bitmap bitDownLoad;
- public MyView(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- new Thread(this).start();
- this.setFocusable(true);
- this.setFocusableInTouchMode(true);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- // TODO Auto-generated method stub
- super.onDraw(canvas);
- canvas.drawColor(Color.BLACK);
- if(bitDownLoad!=null)
- {
- canvas.drawBitmap(bitDownLoad, 0,0,null);
- }
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO Auto-generated method stub
- if(keyCode==KeyEvent.KEYCODE_BACK)//當按返回鍵時,請求網路下載圖片。
- {
- if(Http.getInstance().isConnecting())
- {
- Toast.makeText(this.getContext(), CONNECTING_TOAST, Toast.LENGTH_LONG).show();
- }
- else
-
相關推薦
Android Http請求網路模擬超時
http://zhang247124629.iteye.com/blog/1490102 在Android平臺上,Http請求網路有可以設定連線超時的API(conn.setConnectTimeout),在J2ME平臺上就沒有該API了。於是小阿哥今天小模擬一下。閒話
Android HTTP 請求超過超時時間未返回 報錯java.net.UnknownHostException: Unable to resolve host
現象:手機連線WIFI,但未連線外網。設定urlCon.setConnectTimeout(5000); urlCon.setReadTimeout(8000); 在Android傳送Http請求時,時間超過設定的超時時間仍未返回。HTTP框架使用的是開源的Androi
android http請求訪問介面的封裝
轉自 https://www.cnblogs.com/you411305469/p/5212479.html 裡面介紹了實用的兩種 要特別注意,向php請求資料是表單型別的資料 application/x-www-form-urlencoded import android.os
Android通過請求網路獲取圖片資源
在日常的編寫Android軟體的過程中,避免不了使用網路請求,也不可能使用單機的Android,所以本次講的是通過Android傳送網路請求請求圖片的文章。 我先來總結一下網路請求的幾個步驟: 1、將想要請求的圖片地址轉換成URL類 2、通過openConnection來建立連線
Android Http請求失敗解決方法
1、MainActivity.java 檔案中的onCreate方法改成如下: @SuppressLint("NewApi") @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCrea
Android http請求使用介面回撥
Android中不支援在主執行緒發起http請求資料,我們需要把http請求放到子執行緒中處理。為了保證程式碼的執行順序,可以使用介面回撥的方式拿到請求到的資料並進行處理。 定義回撥介面 public interface OnConnectResult
Android Http請求方法彙總
這篇文章主要實現了在Android中使用JDK的HttpURLConnection和Apache的HttpClient訪問網路資源,服務端採用python+flask編寫,使用Servlet太麻煩了。關於Http協議的相關知識,可以在網上檢視相關資料。程式碼比較簡單,就不
Android基礎入門教程——7.1.4 Android HTTP請求方式-HttpClient
Android基礎入門教程——7.1.4 Android HTTP請求方式:HttpClient 標籤(空格分隔): Android基礎入門教程 本節引言: 在上一節中我們對HttpURLConnection進行了學習,本節到第二種方式:Ht
Android HTTP請求方式:HttpURLConnection
1.HttpURLConnection的介紹 答:一種多用途、輕量極的HTTP客戶端,使用它來進行HTTP操作可以適用於大多數的應用程式。雖然HttpURLConnection的API提供的比較簡單,但是同時這也使得我們可以更加容易地去使用和擴充套件它。繼承至URLCo
android http請求實現session管理
session一般儲存在Cookie當中,首先我們瞭解一下session和cookie Cookie和Session都為了用來儲存狀態資訊,都是儲存客戶端狀態的機制,它們都是為了解決HTTP無狀態的問題而所做的努力。 Session可以用Cookie來實現,也可
HTTP基礎與Android——HTTP請求頭響應頭
一、HTTP頭資訊解讀: HTTP的頭域包括通用頭、請求頭、響應頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成(說白了就是鍵值對)。 通用頭:是客戶端和伺服器都可以使用的頭部,可以在客戶端、伺服器和其他應用程式之間提供一些非
解決android http請求帶中文引數會亂碼(url編碼)
今天在用android 的 URL url = new URL("http://www.my400800.cn &search=400電話 "); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnectio
Android之Http通訊——4.Android HTTP請求方式:HttpClient
本節引言: 上節講了HttpURLConnection,本節就到HttpClient了,Apache給我們提供的HttpClient(簡單的Http客戶端),不過畢竟不是親兒子,HttpClient在API 21版本後就給Google棄用了,而我
Android HTTP協議請求網路(三)之HttpURLConnection方式
為了演示HttpURLConnection的常見用法,我做了一個App,介面如下所示:主介面MainActivity有四個按鈕,分別表示用GET傳送請求、用POST傳送鍵值對資料、用POST傳送XML資料以及用POST傳送JSON資料,點選對應的按鈕會啟動NetworkActivity並執行相應的操作。Net
android retrofit設定網路請求超時時間
今天開發的時候遇到一個網路請求超時的問題,後臺處理是成功的,但是移動端返回的總是提示請求超時,在設定了retrofit請求超時的時間延長以後,就可以請求成功了,下面是配置的方法: private static final OkHttpClient client =
Android 網路請求登入後更新頁面實現 Handler+HTTP請求詳解
為了實現登入功能,我們需要一下幾步:1、獲取UI資料,並向伺服器傳送請求2、等待返回資料,解析3、將返回資料更新到UI執行緒中為了完成以上幾步,我根據每步的功能提出自己的解決方法,順便整理出對應的知識供大家參考。Handler眾所周知,Android程式執行會開啟一個UI執行
Android使用HTTP協議訪問網路和OkHttp傳送HTTP請求
對於Android開發來說,我們只需要瞭解一些就足夠了。它的工作原理很簡單,就是客戶端向伺服器傳送一條HTTP請求,伺服器收到請求之後會返回一些資料給客戶端,然後客戶端再對這些資料進行解析和處理就可以了。Android上傳送HTTP請求一般有兩種方式:HttpURLConne
httpclient傳送http請求設定網路超時時間
一、傳送的ApiClient方法 可以設定網路超時時間 /*** Eclipse Class Decompiler plugin, copyright (c) 2016 Chen Chao ([email protected]) ***/ pack
Android HTTP協議請求網路(二)之HttpClient方式
1 package com.example.m04_http01; 2 3 import org.apache.http.HttpEntity; 4 import org.apache.http.HttpResponse; 5 import org.apache.http.client.HttpC
Android http網路請求框架搭建
android上網路請求大致分為使用socket和http,普通應用大多使用http或者https,今天主要介紹http,實現目標通過使用http搭建一套簡單的Android網路請求框架。 網路請求部分: Android的網路請求部分我們大致分為: 引數傳遞,網路請求,