Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中使用HttpURLConnection和HttpClient實現GET和POST請求訪問網絡

Android中使用HttpURLConnection和HttpClient實現GET和POST請求訪問網絡

編輯:關於Android編程

HttpURLConnection中的GET

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
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.os.Handler;
import android.os.Message;
import android.util.Base64;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText content;   //聲明一個輸入文本內容的編輯框對象
    private Button button;  //聲明一個發表按鈕對象
    private Handler handler; // 聲明一個Handler對象
    private String result = ""; //聲明一個代表顯示內容的字符串
    private TextView resultTV;  //聲明一個顯示結果的文本框對象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        content = (EditText) findViewById(R.id.content);    //獲取輸入文本內容的EditText組件
        resultTV = (TextView) findViewById(R.id.result);    //獲取顯示結果的TextView組件
        button = (Button) findViewById(R.id.button);    //獲取“發表”按鈕組件
        //為按鈕添加單擊事件監聽器
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if ("".equals(content.getText().toString())) {
                    Toast.makeText(MainActivity.this, "請輸入要發表的內容!",
                            Toast.LENGTH_SHORT).show(); //顯示消息提示
                    return;
                }

                // 創建一個新線程,用於發送並讀取微博信息
                new Thread(new Runnable() {
                    public void run() {
                        send(); //發送文本內容到Web服務器
                        Message m = handler.obtainMessage(); // 獲取一個Message
                        handler.sendMessage(m); // 發送消息
                    }
                }).start(); // 開啟線程
            }
        });
        //創建一個Handler對象
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (result != null) {
                    resultTV.setText(result); // 顯示獲得的結果
                    content.setText("");        //清空文本框
                }
                super.handleMessage(msg);
            }
        };
    }

    public void send() {
        String target="";
        target = "http://192.168.1.66:8081/blog/index.jsp?content="
                    +base64(content.getText().toString().trim());   //要訪問的URL地址
        URL url;
        try {
            url = new URL(target);
            HttpURLConnection urlConn = (HttpURLConnection) url
                    .openConnection();  //創建一個HTTP連接
            InputStreamReader in = new InputStreamReader(
                    urlConn.getInputStream()); // 獲得讀取的內容
            BufferedReader buffer = new BufferedReader(in); // 獲取輸入流對象
            String inputLine = null;
            //通過循環逐行讀取輸入流中的內容
            while ((inputLine = buffer.readLine()) != null) {
                result += inputLine + "\n";
            }
            in.close(); //關閉字符輸入流對象
            urlConn.disconnect();   //斷開連接
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //對字符串進行Base64編碼
    public String base64(String content){
        try {
            content=Base64.encodeToString(content.getBytes("utf-8"), Base64.DEFAULT);   //對字符串進行Base64編碼
            content=URLEncoder.encode(content); //對字符串進行URL編碼
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();    //輸出異常信息
        }
        return content;
    }
}

HttpURLConnection中的POST

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
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.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText nickname; // 聲明一個輸入昵稱的編輯框對象
    private EditText content; // 聲明一個輸入文本內容的編輯框對象
    private Button button; // 聲明一個發表按鈕對象
    private Handler handler; // 聲明一個Handler對象
    private String result = ""; // 聲明一個代表顯示內容的字符串
    private TextView resultTV; // 聲明一個顯示結果的文本框對象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        content = (EditText) findViewById(R.id.content); // 獲取輸入文本內容的EditText組件
        resultTV = (TextView) findViewById(R.id.result); // 獲取顯示結果的TextView組件
        nickname = (EditText) findViewById(R.id.nickname); // 獲取輸入昵稱的EditText組件
        button = (Button) findViewById(R.id.button); // 獲取“發表”按鈕組件
        // 為按鈕添加單擊事件監聽器
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if ("".equals(nickname.getText().toString())
                        || "".equals(content.getText().toString())) {
                    Toast.makeText(MainActivity.this, "請將內容輸入完整!",
                            Toast.LENGTH_SHORT).show();
                    return;
                }

                // 創建一個新線程,用於從網絡上獲取文件
                new Thread(new Runnable() {
                    public void run() {
                        send();
                        Message m = handler.obtainMessage(); // 獲取一個Message
                        handler.sendMessage(m); // 發送消息
                    }
                }).start(); // 開啟線程

            }
        });
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (result != null) {
                    resultTV.setText(result); // 顯示獲得的結果
                    content.setText(""); // 清空內容編輯框
                    nickname.setText(""); // 清空昵稱編輯框
                }
                super.handleMessage(msg);
            }
        };
    }

    public void send() {
        String target = "http://192.168.1.66:8081/blog/dealPost.jsp";   //要提交的目標地址
        URL url;
        try {
            url = new URL(target);
            HttpURLConnection urlConn = (HttpURLConnection) url
                    .openConnection(); // 創建一個HTTP連接
            urlConn.setRequestMethod("POST"); // 指定使用POST請求方式
            urlConn.setDoInput(true); // 向連接中寫入數據
            urlConn.setDoOutput(true); // 從連接中讀取數據
            urlConn.setUseCaches(false); // 禁止緩存
            urlConn.setInstanceFollowRedirects(true);   //自動執行HTTP重定向
            urlConn.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded"); // 設置內容類型
            DataOutputStream out = new DataOutputStream(
                    urlConn.getOutputStream()); // 獲取輸出流
            String param = "nickname="
                    + URLEncoder.encode(nickname.getText().toString(), "utf-8")
                    + "&content="
                    + URLEncoder.encode(content.getText().toString(), "utf-8"); //連接要提交的數據
            out.writeBytes(param);//將要傳遞的數據寫入數據輸出流
            out.flush();    //輸出緩存
            out.close();    //關閉數據輸出流
            // 判斷是否響應成功
            if (urlConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStreamReader in = new InputStreamReader(
                        urlConn.getInputStream()); // 獲得讀取的內容
                BufferedReader buffer = new BufferedReader(in); // 獲取輸入流對象
                String inputLine = null;
                while ((inputLine = buffer.readLine()) != null) {
                    result += inputLine + "\n";
                }
                in.close(); //關閉字符輸入流
            }
            urlConn.disconnect();   //斷開連接
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

HttpClient的GET

和HttpURLConnection中的Get上述代碼中唯一不同的是send方法;

public void send() {
        String target = "http://192.168.1.66:8081/blog/deal_httpclient.jsp?param=get";  //要提交的目標地址
        HttpClient httpclient = new DefaultHttpClient();//創建HttpClient對象
        HttpGet httpRequest = new HttpGet(target);  //創建HttpGet連接對象
        HttpResponse httpResponse;
        try {
            httpResponse = httpclient.execute(httpRequest); //執行HttpClient請求
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                result = EntityUtils.toString(httpResponse.getEntity());    //獲取返回的字符串
            }else{
                result="請求失敗!";
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

HttpClient的POST

同樣的和HttpURLConnection中的Post不同的是send方法:

public void send() {
        String target = "http://192.168.1.66:8081/blog/deal_httpclient.jsp";    //要提交的目標地址
        HttpClient httpclient = new DefaultHttpClient();    //創建HttpClient對象
        HttpPost httpRequest = new HttpPost(target);    //創建HttpPost對象
        //將要傳遞的參數保存到List集合中
        List params = new ArrayList();
        params.add(new BasicNameValuePair("param", "post"));    //標記參數
        params.add(new BasicNameValuePair("nickname", nickname.getText().toString()));  //昵稱
        params.add(new BasicNameValuePair("content", content.getText().toString()));    //內容
        try {
            httpRequest.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //設置編碼方式
            HttpResponse httpResponse = httpclient.execute(httpRequest);    //執行HttpClient請求
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  //如果請求成功
                result += EntityUtils.toString(httpResponse.getEntity());   //獲取返回的字符串

            }else{
                result = "請求失敗!";
            }
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();   //輸出異常信息
        } catch (ClientProtocolException e) {
            e.printStackTrace();    //輸出異常信息
        } catch (IOException e) {
            e.printStackTrace();    //輸出異常信息
        }
    }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved