0912Android基础网络技术之Http协议访问网络
来源:互联网 发布:linux登录密码修改 编辑:程序博客网 时间:2024/05/20 11:46
使用HTTP协议访问网络
它的工作原始,客户端向服务器发出一条HTTP请求,服务器收到请求后会返回一些数据给客户端,然后客户端对这些数据进行解析和处理。包含HttpUrlConnection和HttpClient
通过urlConnection读取网页中的数据
首先的首先还是要先添加权限
<uses-permission android:name="android.permission.INTERNET" />
设置一个按键触发事件,将访问网络写在线程里,因为访问网络是耗时操作,耗时操作不能直接写在主线程里面。
public void onClick(View v) { switch (v.getId()) { case R.id.btn_read: new Thread(new Runnable() { @Override public void run() { connectServerlet(); } }).start(); break; }
线程 connectServerlet(),将获得的信息通过Message传到Handler中,进而设置UI。
private void connectServerlet() { try { URL url = new URL("http://192.168.0.44:8080/MyServiceTest/MyTestServlet");// URL url = new URL("http://www.360.com"); URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = reader.readLine();// 新建stringbuffer对象 mStringBuffer = new StringBuffer(); while (line != null) { mStringBuffer.append(line); Log.d("读取服务器的内容", " " + line); line = reader.readLine(); }// 将数据传入handler Message msg = handler.obtainMessage(); msg.what = SEND_MESSAGE; msg.obj = mStringBuffer.toString().trim();// trim去掉空格 handler.sendMessage(msg); reader.close(); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
Handler记得导这个包import android.os.Handler;
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SEND_MESSAGE: String content = (String) msg.obj; mTvMessage.setText(content); break; default: break; } } };
全部代码见主线程代码
达到的效果
HttpURLConnection
添加权限
<uses-permission android:name="android.permission.INTERNET" />
另外开一个活动,通过intent进行通信
Intent intenthttpUrl=new Intent(getApplicationContext(),MyHttpURLConnection.class); startActivity(intenthttpUrl);
在AndroidMainfest中注册(具体位置见下面主线程代码)
<activity android:name=".MyHttpURLConnection"></activity>
doget和dopost方法
package com.example.laowang.myinternet;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;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.ProtocolException;import java.net.URL;import java.net.URLConnection;public class MyHttpURLConnection extends Activity implements View.OnClickListener{ private Button mBtnHttpURlGet; private Button mBtnHttpURlPost; private StringBuffer mStringBuffer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_httpurl); mBtnHttpURlGet= (Button) findViewById(R.id.btn_httpurl_doget); mBtnHttpURlPost= (Button) findViewById(R.id.btn_httpurl_dopost); mBtnHttpURlGet.setOnClickListener(this); mBtnHttpURlPost.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_httpurl_doget: new Thread(new Runnable() { @Override public void run() { doGet(); } }).start(); break; case R.id.btn_httpurl_dopost: new Thread(new Runnable() { @Override public void run() { doPost(); } }).start(); break; default: break; } } private void doPost() { String urlString1="http://192.168.0.44:8080/MyServiceTest/MyTestServlet"; try { URL url1= new URL(urlString1); HttpURLConnection connection=(HttpURLConnection) url1.openConnection();//强制转型 //HttpURLConnection进行控制 //设置连接超时时间 connection.setConnectTimeout(30000); //读取超时时间 connection.setReadTimeout(30000); //设置编码格式 // 设置接受的数据类型 connection.setRequestProperty("Accept-Charset", "utf-8"); // 设置可以接受序例化的java对象 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //客户端输出部分 //设置 URL 请求的方法 connection.setRequestMethod("POST"); //设置客户端可以给服务器提交数据,默认是false的,POST时必须改成true connection.setDoOutput(true); //设置可以读取服务器返回的内容,默认为true,不写也可以 connection.setDoInput(true); //post方法不允许使用缓存 connection.setUseCaches(false); String params="username=HttpURLConnectionDoPost&password=123456"; connection.getOutputStream().write(params.getBytes());//客户端输出数据 InputStream is = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = reader.readLine();// 新建stringbuffer对象 mStringBuffer = new StringBuffer(); while (line != null) { mStringBuffer.append(line); Log.d("读取服务器的内容", " " + line); line = reader.readLine(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void doGet() { try { //基本设置,设置URL连接,设置HttpURLConnection String urlString = "http://192.168.0.44:8080/MyServiceTest/MyTestServlet?username=HttpURLConnectionDoGet&password=123456"; URL url = new URL(urlString);//生成url URLConnection connect = url.openConnection();//打开url连接 //强制造型成httpUrlConnection HttpURLConnection httpConnection = (HttpURLConnection) connect; //设置请求方法 httpConnection.setRequestMethod("GET"); //设置连接超时的时间 httpConnection.setConnectTimeout(3000); //读取时间超时 httpConnection.setReadTimeout(3000); //设置编码格式 // 设置接受的数据类型 httpConnection.setRequestProperty("Accept-Charset", "utf-8"); // 设置可以接受序例化的java对象 httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); InputStream is = connect.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = reader.readLine();// 新建stringbuffer对象 mStringBuffer = new StringBuffer(); while (line != null) { mStringBuffer.append(line); Log.d("读取服务器的内容", " " + line); line = reader.readLine(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
达到的效果
doget
dopost
HttpClient
添加权限
<uses-permission android:name="android.permission.INTERNET" />
另外开一个活动,通过intent进行通信
Intent intent1 = new Intent(getApplicationContext(), MyHttpClientActivity.class); startActivity(intent1);
在AndroidMainfest中注册(具体位置见下面主线程代码)
<activity android:name=".MyHttpClientActivity"></activity>
doget和dopost方法
package com.example.laowang.myinternet;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.StatusLine;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.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.util.ArrayList;public class MyHttpClientActivity extends Activity implements View.OnClickListener{ private Button mBtnClientDoPost; private Button mBtnClientDoGet; private TextView mTvClientBack; private String line; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_httpclient); mBtnClientDoGet= (Button) findViewById(R.id.btn_client_doget); mBtnClientDoPost= (Button) findViewById(R.id.btn_client_dopost); mTvClientBack= (TextView) findViewById(R.id.tv_client_back); mBtnClientDoPost.setOnClickListener(this); mBtnClientDoGet.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_client_doget: new MyAsyncTask().execute(); break; case R.id.btn_client_dopost: new Thread(new Runnable() { @Override public void run() { httpDoPost(); } }).start(); break; default: break; } } private void httpDoPost() { String urlString = "http://192.168.0.44:8080/MyServiceTest/MyTestServlet"; HttpClient client=new DefaultHttpClient(); //设置客户端输出信息 NameValuePair pair1=new BasicNameValuePair("username", "HttpClientPost"); NameValuePair pair2=new BasicNameValuePair("password", "123456"); ArrayList<NameValuePair> array=new ArrayList<>(); array.add(pair2); array.add(pair1); // post方法 // 设置post方法及环境 HttpPost post = new HttpPost(urlString); try { //设置传递的参数格式 post.setEntity(new UrlEncodedFormEntity(array, "UTF-8")); post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); // 执行post方法法获得服务器返回的所有数据 HttpResponse response = client.execute(post); // 接收处理服务器返回数据 // 获得服务器返回的表头 StatusLine statusLine = response.getStatusLine(); // 获得状态码 int code = statusLine.getStatusCode(); if (code == HttpURLConnection.HTTP_OK) { // 获得数据实体 HttpEntity entity = response.getEntity(); // 获得数据的输入流并读入 InputStream is = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); while (line != null) { System.out.println(line); line = br.readLine(); } } } catch (ClientProtocolException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } class MyAsyncTask extends AsyncTask<String ,Integer,String>{ @Override protected void onPostExecute(String s) { super.onPostExecute(s); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } @Override protected String doInBackground(String... params) { HttpClient client=new DefaultHttpClient(); // 建立client String urlString = "http://192.168.0.44:8080/MyServiceTest/MyTestServlet?username=HttpClientGet&password=123456"; // 设置get方法及环境 HttpGet get = new HttpGet(urlString); get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); try { // 执行get方法法获得服务器返回的所有数据 HttpResponse response = client.execute(get); // 接收处理服务器返回数据 // 获得服务器返回的表头 StatusLine statusLine = response.getStatusLine(); // 获得状态码 int code = statusLine.getStatusCode(); if (code == HttpURLConnection.HTTP_OK) { // 获得数据实体 HttpEntity entity = response.getEntity(); // 获得数据的输入流并读入 InputStream is = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); line = br.readLine(); while (line != null) { line = br.readLine(); } } } catch (ClientProtocolException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } return "登录成功"; } }}
达到的效果
doget
dopost
主线程代码
这个主线程也用于后面的下载、XUtils、Volley中
package com.example.laowang.myinternet;import android.app.Activity;import android.content.Intent;import android.os.Handler;import android.os.Message;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;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.ProtocolException;import java.net.URL;import java.net.URLConnection;public class MainActivity extends Activity implements View.OnClickListener { private Button mBtnRead; private Button mBtnURLConnection; private Button mBtnVolley; private Button mBtnDownLoad; private Button mBtnHttpClient; private Button mBtnHttpUtils; private TextView mTvMessage; private StringBuffer mStringBuffer; private static final int SEND_MESSAGE = 0x222; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SEND_MESSAGE: String content = (String) msg.obj; mTvMessage.setText(content); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnRead = (Button) findViewById(R.id.btn_read); mBtnURLConnection = (Button) findViewById(R.id.btn_url_connection); mBtnVolley = (Button) findViewById(R.id.btn_volley_get); mBtnDownLoad = (Button) findViewById(R.id.btn_download); mTvMessage = (TextView) findViewById(R.id.tv_message); mBtnHttpClient = (Button) findViewById(R.id.btn_http_client); mBtnHttpUtils = (Button) findViewById(R.id.btn_httputils_get); mBtnRead.setOnClickListener(this); mBtnURLConnection.setOnClickListener(this); mBtnVolley.setOnClickListener(this); mBtnDownLoad.setOnClickListener(this); mBtnHttpClient.setOnClickListener(this); mBtnHttpUtils.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_read: new Thread(new Runnable() { @Override public void run() { connectServerlet(); } }).start(); break; case R.id.btn_url_connection: Intent intenthttpUrl=new Intent(getApplicationContext(),MyHttpURLConnection.class); startActivity(intenthttpUrl); break; case R.id.btn_download: Intent intent = new Intent(getApplicationContext(), SecondActivity.class); startActivity(intent); break; case R.id.btn_volley_get: Intent intentVolley = new Intent(getApplicationContext(), MyVolleyActivity.class); startActivity(intentVolley); break; case R.id.btn_http_client: Intent intent1 = new Intent(getApplicationContext(), MyHttpClientActivity.class); startActivity(intent1); break; case R.id.btn_httputils_get: Intent intentUtils = new Intent(getApplicationContext(), MyXUtils.class); startActivity(intentUtils); break; default: break; } } private void connectServerlet() { try { URL url = new URL("http://192.168.0.44:8080/MyServiceTest/MyTestServlet");// URL url = new URL("http://www.360.com"); URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = reader.readLine();// 新建stringbuffer对象 mStringBuffer = new StringBuffer(); while (line != null) { mStringBuffer.append(line); Log.d("读取服务器的内容", " " + line); line = reader.readLine(); }// 将数据传入handler Message msg = handler.obtainMessage(); msg.what = SEND_MESSAGE; msg.obj = mStringBuffer.toString().trim();// trim去掉空格 handler.sendMessage(msg); reader.close(); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
AndroidMainfest
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.laowang.myinternet"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity"></activity> <activity android:name=".MyHttpClientActivity"></activity> <activity android:name=".MyVolleyActivity"></activity> <activity android:name=".MyXUtils"></activity> <activity android:name=".MyHttpURLConnection"></activity> </application></manifest>
0 0
- 0912Android基础网络技术之Http协议访问网络
- Android的网络技术(1) - 通过WebView控件和HTTP协议访问网络
- Android之使用HTTP协议访问网络
- Android之使用HTTP协议访问网络
- Android网络基础之HTTP协议原理
- Android中进行基于HTTP协议的网络访问基础
- Android Http协议访问网络
- Android - HTTP 协议访问网络
- Android:HTTP协议访问网络
- 【Android 学习笔记】 之 使用HTTP协议访问网络
- android学习之使用HTTP协议访问网络
- android基础学习之http协议网络请求基本实例
- Android学习使用HTTP协议访问网络
- Android使用HTTP协议访问网络
- Android使用Http协议访问网络
- Android使用Http协议访问网络
- Android入门-使用Http协议访问网络
- Android—使用Http协议访问网络
- imagebutton的src和background有什么区别呢?
- JAVA基础学习--面向对象试题
- linux常用命令(32): /etc/group文件详解
- XHTML表单
- MySQL数据文件及常用工具
- 0912Android基础网络技术之Http协议访问网络
- 《Java编程思想》读书笔记2.一切都是对象
- sql 自定义排序
- 重置win7系统
- LeetCode-Delete Node in a Linked List
- 2015.9.14
- Android网络连接——ConnectivityManager、WebView
- 内存考点
- zoj--Ants