我試圖使用HttpGet實現ping,但行爲是隨機的。HttpGet Android API的隨機行爲
我有下面的代碼,測試網絡/服務器連接:
boolean result = false;
HttpGet request = new HttpGet("www.MyServer.com");
HttpParams httpParameters = new BasicHttpParams();
HttpClient httpClient = new DefaultHttpClient(httpParameters);
try
{
HttpConnectionParams.setConnectionTimeout(httpParameters, 6000);
HttpConnectionParams.setSoTimeout(httpParameters, 6000);
HttpResponse response = httpClient.execute(request);
int status = response.getStatusLine().getStatusCode();
if (status == HttpStatus.SC_OK)
{
result = true;
}
}
catch(Exception e)
{
e.printStackTrace();
result = false;
}
Log.d("App", "Ping Result:"+result);
上面的代碼,我在線程中運行,因爲它可能需要一段時間。 當我第一次運行這個測試時,我得到的結果是真實的,但之後行爲是隨機的,有時它給了我錯誤'主機不可達',我得到的結果爲假。
我只想測試服務器是否可以從當前配置的Android網絡訪問。
是否有任何可靠的API來測試互聯網/服務器連接?
UPDATE:
在服務我具有以下功能,其啓動測試。
void startTest()
{
ServerTestThread mServerTestThread = new ServerTestThread()
mServerTestThread.start();
}
class ServerTestThread extends Thread
{
boolean result = false;
public void run()
{
//HttpGet code
//Send Message TO GUI Thread with result.
}
}
高於startTest
函數正在創建測試線程的實例並調用啓動函數。當測試完成時,我將消息發送給包含結果的主線程。
謝謝。
感謝您的答覆,但爲什麼它的第一次。如果超時時間少於第一次也應該失敗。我需要添加某種清理,因爲此代碼正在一個線程中調用。 – User7723337 2012-03-16 09:02:20
你可以發佈代碼,以便我看到你如何運行線程? – Caner 2012-03-16 09:05:05
請參閱我更新的問題。 – User7723337 2012-03-16 09:33:49