zoukankan      html  css  js  c++  java
  • Android网络笔记

    (1)网络状态:

    ConnectivityManager负责管理所有连接的服务(如:系统服务,3G/4G,WiFi,蓝牙等)。查看网络状态的类是NetWorkInfo,它是通过ConnectivityManager来获得,可以用来检测当前网络类型,当前网络状态。网络状态在一下场景需要使用,界面上需要表述当前的网络状态,根据不同的网络状态来处理逻辑,需要判断网络情况来开启服务。下面以一个demo来说明

    package com.example.connectivitymanagerdemo;
    
    import android.app.Activity;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
    	private Button btn;
    	private TextView tv;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		tv=(TextView) findViewById(R.id.textView1);
    		btn=(Button) findViewById(R.id.button1);
    		
    		btn.setOnClickListener(new View.OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				//获取连接管理实例
    				ConnectivityManager cm=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    				//获得一个激活的网络连接实例
    				NetworkInfo ni=cm.getActiveNetworkInfo();
    				if(ni==null){
    					tv.setText("网络没有激活,请打开网络");
    				}else{
    					if(ni.getState().equals(NetworkInfo.State.CONNECTED)){
    						tv.setText("网络已经连接");
    					}else{
    						tv.setText("网络没有连接");
    					}
    				}
    			}
    		});
    	}
    
    	
    }
    

    (2)网络数据的获取HttpURLConnection的使用

    我们可以如同对文件的读写来操作网络的访问,通过InputStream流来获取数据,通过OutputStream来发送数据

    HttpURLConnection可以用来接受和发送数据:通过HttpURLConnection实例调用getInputStream()可以获得inputStream

    创建URL : URL url=new URL(Web_URL);

    创建HttpURLConnection连接: connection=(HttpURLConnection)url.openConnection();

    添加网络权限:<uses-permission android:name="android.permission.INTERNET"/>

    网络访问总是存在阻塞的可能:需要放到主线程之外去访问,否则会抛出异常

    HttpURLConnection创建好了以后,就可以使用该对象的发送Http请求了,Http请求通常分为get请求和Post请求,采用get请求只适合发送大小在1024个字节以内的数据,当要发送较大的数据时,就需要使用Post方式来发送请求。HttpURLConnection对象发送Http请求时候,默认的是get请求,使用post来发送请求的时候要使用setRequestMethod()方法进行指定Http请求方式

    (3)使用Apache组织提供的HttpClient来实现网络的访问,其使用方法,和HttpURLConnection类似。下面以一个demo来简单说明实现方式

    package com.example.httpconnectiondemo;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
    	static final String StringUrl = "http://www.weather.com.cn/data/sk/101010100.html";
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		Button btn = (Button) findViewById(R.id.button1);
    		btn.setOnClickListener(new View.OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				MyAsyncTask task = new MyAsyncTask();
    				task.execute();
    			}
    		});
    	}
    
    	class MyAsyncTask extends AsyncTask<Void, Void, String> {
    
    		@Override
    		protected String doInBackground(Void... params) {
    			try {
    				// 建立url
    				// URL url = new URL(StringUrl);
    				// 获得连接
    				// HttpURLConnection con = (HttpURLConnection)
    				// url.openConnection();
    				// 获取输入流
    				// InputStream is = con.getInputStream();
    				
    				// 通过HttpClient的方式来获取数据
    				HttpGet get = new HttpGet(StringUrl);
    				HttpClient client = new DefaultHttpClient();
    				HttpResponse res = client.execute(get);
    				if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    					InputStream is = res.getEntity().getContent();
    					StringBuffer sb = new StringBuffer();
    					int c = 0;
    					while ((c = is.read()) != -1) {
    						sb.append((char) c);
    					}
    					return sb.toString();
    				}
    			} catch (MalformedURLException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			return null;
    		}
    
    		@Override
    		protected void onPostExecute(String result) {
    			super.onPostExecute(result);
    			TextView tv = (TextView) findViewById(R.id.textView1);
    			tv.setText(result);
    		}
    
    	}
    }
    

    (4)使用webVIew组件浏览网页,可以使用webView和javaScript进行交互,下面以一个实例来说明javaScript和webview的交互过程

    首先在assert文件夹下面穿件一个html文件,文件代码如下:

    <input type="button" value="button" onClick="showJavaToast('hello,word')"/>
    <script type="text/javascript">
        function showJavaToast(toast){
        Android.showMyToast(toast);
        }
    </script>

    这里的Android.showMyToast(toast)是调用的android里面自己写好的接口里的方法

    在src中添加一个javascript的类,文件代码如下:

    package com.example.webview_javascript_demo;
    
    import android.content.Context;
    import android.webkit.JavascriptInterface;
    import android.widget.Toast;
    
    public class Myjavascript {
    	private Context context;
    
    	public Myjavascript(Context context) {
    		this.context = context;
    	}
    
    	@JavascriptInterface   //api17 以上一定要加这句话,才可以识别它可以用作javascript中
    	public void showMyToast(String toast) {
    		Toast.makeText(context, toast, 2000).show();
    	}
    }
    

    最后在住界面代码中使用webView和javaScript进行交互代码如下

    package com.example.webview_javascript_demo;
    
    import android.content.Context;
    import android.webkit.JavascriptInterface;
    import android.widget.Toast;
    
    public class Myjavascript {
    	private Context context;
    
    	public Myjavascript(Context context) {
    		this.context = context;
    	}
    
    	@JavascriptInterface   //api17 以上一定要加这句话,才可以识别它可以用作javascript中
    	public void showMyToast(String toast) {
    		Toast.makeText(context, toast, 2000).show();
    	}
    }
    

    最终实现效果如下:

  • 相关阅读:
    CentOS6.0/RedHat Server 6.4安装配置过程 详细图解!
    关于Haproxy安装和配置:负载配置【haproxy.cfg】问题记录
    菜鸟学习Struts——bean标签库
    2013——2014总结
    高效程序员的45个习惯读书 ——敏捷开发修炼之道笔记之态度决定一切
    Hive深入浅出
    Java从入门到精通——调错篇之SVN 出现 Loced错误
    考试系统优化——准备工作
    深入解析:分布式系统的事务处理经典问题及模型(转载分享)
    黑客攻击 UVa11825
  • 原文地址:https://www.cnblogs.com/deng-c-q/p/5249686.html
Copyright © 2011-2022 走看看