装修效果图网站推荐,手机网站 程序,wordpress 本地环境,文化品牌建设前言#xff0c;Android的网络通信的方式有两种#xff1a;使用Socket或者HTTP#xff0c;今天这一篇我们详细讲解使用HTTP实现的网络通信#xff0c;HTTP又包括两种方式编程方式#xff1a; #xff08;1#xff09;HttpUrlConnection#xff1b; #xff08;2#… 前言Android的网络通信的方式有两种使用Socket或者HTTP今天这一篇我们详细讲解使用HTTP实现的网络通信HTTP又包括两种方式编程方式 1HttpUrlConnection 2HttpClient 好了我们直接进行讲解当然之前也会有一部分有关Android网络通信的其他知识我们也应该了解。 一.获取网络状态的方法 1MainActivity.java中的关键代码 1 2 3 4 5 6 7 8 //网络管理类可以判断是否能上网以及网络类型 ConnectivityManager cm(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo infocm.getActiveNetworkInfo(); if(info!null){ Toast.makeText(MainActivity.this, 连网正常info.getTypeName(), Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this, 未连网, Toast.LENGTH_SHORT).show(); } 2注意一定要在主配置文件中增加这个权限 它是application的兄弟标签 1uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE/ 3OK我们看一下我们的设备的上网状态和类型吧 二.使用URL访问网页源码 1MainActivity.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 package com.example.l0903_urldata; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.os.Bundle; /** * 访问网页源码 * author asus * */ public class MainActivity extends Activity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { //访问百度的html文件的源码 InputStream isnew URL(http://www.baidu.com).openStream(); //读取数据的包装流 BufferedReader brnew BufferedReader(new InputStreamReader(is)); //str用于读取一行数据 String strnull; //StringBuffer用于存储所欲数据 StringBuffer sbnew StringBuffer(); while((strbr.readLine())!null){ sb.append(str); } System.out.println(sb.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 2注意有关网络的操作都需要在主配置文件里添加下面这个权限 1uses-permission android:nameandroid.permission.INTERNET/ 三.WebView 控件的简单使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package com.example.l0903_webview; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; /** * 就是一个浏览器控件 * 其实没什么用 * author asus * */ public class MainActivity extends Activity { private WebView wv; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wv(WebView) findViewById(R.id.webView1); //WebView控件的方法loadUrl用于加载指定的网络地址 wv.loadUrl(http://www.baidu.com); } } 运行效果 四.使用HttpUrlConnection的编写方式实现Android的网络通信 1.首先自己先搭建一个服务器 2.下面是客户端的事了 (1)通过get方式 MainActivity.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 package com.example.l0903_httpurlcnectionget; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.TextView; /** * 通过Get方法获取服务器的数据 * 直接在地址中用?键值value的方式来使用 * 所以传递的参数直接显示出来不安全 * author asus * */ public class MainActivity extends Activity { private HttpURLConnection conn; private URL url; private InputStream is; private TextView tv; private EditText et; private String name; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv(TextView) findViewById(R.id.textView1); et(EditText) findViewById(R.id.editText1); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { Override public void onClick(View v) { nameet.getText().toString(); //定义访问的服务器地址10.0.2.2是Android的访问的本地服务器地址 String urlDatehttp://10.0.2.2:8080/My_Service/webdate.jsp?namename; try { //封装访问服务器的地址 urlnew URL(urlDate); try { //打开对服务器的连接 conn(HttpURLConnection) url.openConnection(); //连接服务器 conn.connect(); /**读入服务器数据的过程**/ //得到输入流 isconn.getInputStream(); //创建包装流 BufferedReader brnew BufferedReader(new InputStreamReader(is)); //定义String类型用于储存单行数据 String linenull; //创建StringBuffer对象用于存储所有数据 StringBuffer sbnew StringBuffer(); while((linebr.readLine())!null){ sb.append(line); } //用TextView显示接收的服务器数据 tv.setText(sb.toString()); System.out.println(sb.toString()); } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } } }); } } 权限同上面第二个所有与网络有关的操作都需要添加下面的就不再赘述了 运行效果 2通过post方式安全 MainActivity.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 package com.example.l0903_httpurlconectionpost; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.TextView; /** * 通过Post方法传递参数 * 安全 * author asus * */ public class MainActivity extends Activity { private HttpURLConnection conn; private URL url; private InputStream is; private OutputStream os; private EditText et; private TextView tv; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et(EditText) findViewById(R.id.editText1); tv(TextView) findViewById(R.id.tv); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { Override public void onClick(View v) { // TODO Auto-generated method stub String urlDatehttp://10.0.2.2:8080/My_Service/webdate.jsp; try { urlnew URL(urlDate); try { //打开服务器 conn(HttpURLConnection) url.openConnection(); //设置输入输出流 conn.setDoOutput(true); conn.setDoInput(true); //设置请求的方法为Post conn.setRequestMethod(POST); //Post方式不能缓存数据则需要手动设置使用缓存的值为false conn.setUseCaches(false); //连接数据库 conn.connect(); /**写入参数**/ osconn.getOutputStream(); //封装写给服务器的数据这里是要传递的参数 DataOutputStream dosnew DataOutputStream(os); //写方法name是key值不能变编码方式使用UTF-8可以用中文 dos.writeBytes(nameURLEncoder.encode(et.getText().toString(), UTF-8)); //关闭外包装流 dos.close(); /**读服务器数据**/ isconn.getInputStream(); BufferedReader brnew BufferedReader(new InputStreamReader(is)); String linenull; StringBuffer sbnew StringBuffer(); while((linebr.readLine())!null){ sb.append(line); } tv.setText(sb.toString()); System.out.println(sb.toString()); } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } } }); } } 五.使用HttpClient的编写方式实现Android的网络通信 1.服务器同上 2.使用get的方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package com.example.l0903_http_get; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; 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 android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { private HttpGet get; private HttpClient cliet; private HttpResponse response; private HttpEntity entity; private InputStream is; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getnew HttpGet(http://10.0.2.2:8080/My_Service/webdate.jsp?nameooooooo); clietnew DefaultHttpClient(); try { responsecliet.execute(get); entityresponse.getEntity(); isentity.getContent(); BufferedReader brnew BufferedReader(new InputStreamReader(is)); String linenull; StringBuffer sbnew StringBuffer(); while((linebr.readLine())!null){ sb.append(line); } System.out.println(sb.toString()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 3.使用post的方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 package com.example.l0903_http_post; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { //创建请求对象 private HttpPost post; //创建客户端对象 private HttpClient cliet; //创建发送请求的对象 private HttpResponse response; // private UrlEncodedFormEntity urlEntity; //创建接收返回数据的对象 private HttpEntity entity; //创建流对象 private InputStream is; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //包装请求的地址 postnew HttpPost(http://10.0.2.2:8080/My_Service/webdate.jsp); //创建默认的客户端对象 clietnew DefaultHttpClient(); //用list封装要向服务器端发送的参数 ListBasicNameValuePair pairsnew ArrayListBasicNameValuePair(); pairs.add(new BasicNameValuePair(name, llllllllll)); try { //用UrlEncodedFormEntity来封装List对象 urlEntitynew UrlEncodedFormEntity(pairs); //设置使用的Entity post.setEntity(urlEntity); try { //客户端开始向指定的网址发送请求 responsecliet.execute(post); //获得请求的Entity entityresponse.getEntity(); isentity.getContent(); //下面是读取数据的过程 BufferedReader brnew BufferedReader(new InputStreamReader(is)); String linenull; StringBuffer sbnew StringBuffer(); while((linebr.readLine())!null){ sb.append(line); } System.out.println(sb.toString()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } 4.实现HttpClient通信与AsyncTask异步机制的结合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 package com.example.l0903_http_asynctask_get; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; 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 android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.widget.TextView; /** * * author asus * */ public class MainActivity extends Activity { private TextView tv;// 创建请求对象 private HttpGet httpGet; // 创建客户端对象 private HttpClient httpClient; // 发送请求的对象 private HttpResponse httpResponse; // 接收返回数据 private HttpEntity httpEntity; // 创建流 private InputStream in; private ProgressDialog pd; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv (TextView) findViewById(R.id.tv); AsyncTaskString, Void, String asyncTask new AsyncTaskString, Void, String() { Override protected String doInString... params) { String urlstr params[0]; httpGet new HttpGet(urlstr); httpClient new DefaultHttpClient(); try { // 向服务器端发送请求 httpResponse httpClient.execute(httpGet); httpEntity httpResponse.getEntity(); in httpEntity.getContent(); BufferedReader br new BufferedReader( new InputStreamReader(in)); String line null; StringBuffer sb new StringBuffer(); while ((line br.readLine()) ! null) { sb.append(line); } System.out.println(sb.toString()); return sb.toString(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } Override protected void onPostExecute(String result) { if (result ! null) { tv.setText(result); pd.dismiss();// 消除dialog } super.onPostExecute(result); } }; pd ProgressDialog.show(this, 请稍后。。。, 正在请求数据); asyncTask.execute(http://10.0.2.2:8080/My_Service/webdate.jsp?namehahaagehh); } } 运行效果 转载于:https://www.cnblogs.com/AceIsSunshineRain/p/5095137.html