• Androidclient推断server是否开启 HttpHostException解决方式



    Android推断服务器是否开启,试了非常多方法都不行(若server未开启会卡在HttpResponse那),有人说高版本号的Android程序不同意在主线程中訪问网络(主线程中能够读写网络流)有待于验证。(更正:不是说的不同意訪问,而是非常耗时,会假死(不耗时则不会假死);正解:当用户点击一个button时假设运行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验非常差,而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>{
    	
    	/**
    	 * 
    	 * 推断server是否开启
    	 * @param  path   网络server地址
    	 * @return 
    	 * server开启
    	 * server未开启
    	 */
    	
    	@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

  • 相关阅读:
    准爸爸日记之二
    生日的纪念
    未将对象引用设置到对象的实例未将对象引用设置到对象的实例(C#)
    读《中国合伙人》
    Command模式实例(C#)
    开源的C#项目
    抽象工厂模式(C#)
    桥模式(Bridge Pattern)
    抽象工厂模式实例(C#)
    适配器模式实例(C#)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4214712.html
Copyright © 2020-2023  润新知