Android客户端判断服务器是否开启 HttpHostException解决方案


Android判断服务器是否开启,试了很多方法都不行(若server未开启会卡在HttpResponse那),有人说高版本的Android程序不允许在主线程中访问网络(主线程中可以读写网络流)有待于验证。(更正:不是说的不允许访问,而是很耗时,会假死(不耗时则不会假死);正解:当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送消息给主线程,主线程再做相应处理。那么线程之间的消息传递和异步处理用的就是Handler。


方法一:

在xxxActivity的onCreate()方法中添加

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

这两句代码在我写的Activity中本来就添加着,这个方法没有解决我的问题,go on.....


solution 2:

package siat.hpc.ngb.utils;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

import android.os.AsyncTask;
import android.util.Log;

public class ConnServer extends AsyncTask<String,String,String>{
	
	/**
	 * 
	 * 判断服务器是否开启
	 * @param  path   网络服务器地址
	 * @return 
	 * 服务器开启
	 * 服务器未开启
	 */
	
	@Override
	protected String doInBackground(String... params) {
		// TODO Auto-generated method stub
		
		
		try {
			HttpGet get = new HttpGet(params[0]);
Log.i("doInBack1...",params[0]);
			HttpResponse response = new DefaultHttpClient().execute(get);
			
Log.i("doInBack2...",params[0]);
			if(response.getStatusLine().getStatusCode() == 200){
				return "success";
			} 
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return "ClientError";
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return "ServerError";
		}
		return "success";
	}
}

在需要的地方直接调用:

if(new ConnServer().execute(AppConstant.BASE_URL).equals("success")){ 
。。。<pre name="code" class="java" style="font-size: 18px;">。。AppConstant.BASE_URL是一个http的字符串:如http://172.21.6.233:8080/

 
}

refer:http://stackoverflow.com/questions/19162272/httpclient-executehttppost-on-android-4-2-error

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值