Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android http同步請求,android同步請求

android http同步請求,android同步請求

編輯:關於android開發

android http同步請求,android同步請求


1、界面

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:orientation="vertical"
 5     android:layout_height="match_parent"
 6     tools:context=".MainActivity" >
 7 
 8     <EditText
 9         android:id="@+id/et_username"
10         android:layout_width="match_parent"
11         android:layout_height="wrap_content"
12         android:hint="請輸入用戶名"
13         android:text="張三"
14          />
15   
16 
17     <EditText
18         android:id="@+id/et_password"
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:hint="請輸入密碼"
22         android:inputType="textPassword" />
23 
24     <Button
25         android:onClick="myGetData"
26         android:id="@+id/button1"
27         android:layout_width="wrap_content"
28         android:layout_height="wrap_content"
29         android:text="登陸" />
30 
31 </LinearLayout>

2、MainActivity代碼,用來響應button代碼

 1 package com.example.getdata;
 2 
 3 import java.net.HttpURLConnection;
 4 import java.net.MalformedURLException;
 5 import java.net.URL;
 6 
 7 import com.example.getdata.service.LoginService;
 8 
 9 import android.os.Bundle;
10 import android.os.Handler;
11 import android.os.Message;
12 import android.app.Activity;
13 import android.view.Menu;
14 import android.view.View;
15 import android.widget.EditText;
16 import android.widget.Toast;
17 
18 public class MainActivity extends Activity {
19 
20     private EditText et_username;
21     private EditText et_password;
22     /*private Handler handler = new Handler(){
23 
24         @Override
25         public void handleMessage(android.os.Message msg) {
26             // TODO Auto-generated method stub
27             
28         }
29         
30     };*/
31     @Override
32     protected void onCreate(Bundle savedInstanceState) {
33         super.onCreate(savedInstanceState);
34         setContentView(R.layout.activity_main);
35         et_username = (EditText)findViewById(R.id.et_username);
36         et_password = (EditText)findViewById(R.id.et_password);
37     }
38 
39 
40     public void myGetData(View view){
41         final String username = et_username.getText().toString().trim();
42         final String password = et_password.getText().toString().trim();
43         System.out.println("username:" + username);
44         System.out.println("password:" + password);
45         new Thread(){
46             public void run(){
47                 //final String result = LoginService.loginByGet(username, password);
48                 //final String result = LoginService.loginByPost(username, password);
49                 //final String result = LoginService.loginByClientGet(username, password);
50                 final String result = LoginService.loginByClientPost(username, password);
51                 if(result != null){
52                     runOnUiThread(new Runnable(){
53                         @Override
54                         public void run() {
55                             // TODO Auto-generated method stub
56                             Toast.makeText(MainActivity.this, result, 0).show();
57                         }
58                         
59                     });
60                 }else{
61                     runOnUiThread(new Runnable(){
62                         @Override
63                         public void run() {
64                             // TODO Auto-generated method stub
65                             Toast.makeText(MainActivity.this, "請求不成功!", 0).show();
66                         }
67                         
68                     });
69                 }
70             };
71         }.start();
72     }
73     
74 }

3、http請求同步代碼

  1 package com.example.getdata.service;
  2 
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.io.OutputStream;
  6 import java.io.UnsupportedEncodingException;
  7 import java.net.HttpURLConnection;
  8 import java.net.URL;
  9 import java.net.URLEncoder;
 10 import java.util.ArrayList;
 11 import java.util.List;
 12 
 13 import org.apache.http.HttpResponse;
 14 import org.apache.http.NameValuePair;
 15 import org.apache.http.client.ClientProtocolException;
 16 import org.apache.http.client.HttpClient;
 17 import org.apache.http.client.entity.UrlEncodedFormEntity;
 18 import org.apache.http.client.methods.HttpGet;
 19 import org.apache.http.client.methods.HttpPost;
 20 import org.apache.http.impl.client.DefaultHttpClient;
 21 import org.apache.http.message.BasicNameValuePair;
 22 
 23 import com.example.getdata.utils.StreamTools;
 24 /*
 25  * 注意事項:在發送請求時,如果有中文,注意把它轉換為相應的編碼
 26  */
 27 public class LoginService {
 28     
 29     public static String loginByGet(String username, String password){
 30         try {
 31             String path = "http://192.168.1.100/android/index.php?username=" + URLEncoder.encode(username, "utf-8") + "&password=" + password;
 32             URL url = new URL(path);
 33             HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 34             conn.setRequestMethod("GET");
 35             conn.setReadTimeout(5000);
 36             //conn.setRequestProperty(field, newValue);
 37             int code = conn.getResponseCode();
 38             if(code == 200){
 39                 InputStream is = conn.getInputStream();
 40                 String result = StreamTools.readInputStream(is);
 41                 return result;
 42             }else{
 43                 return null;
 44             }
 45         } catch (Exception e) {
 46             // TODO Auto-generated catch block
 47             e.printStackTrace();
 48             return null;
 49         }
 50         
 51     }
 52     
 53     public static String loginByPost(String username, String password){
 54         String path = "http://192.168.1.101/android/index.php";
 55         try {
 56             URL url = new URL(path);
 57             HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 58             conn.setRequestMethod("POST");
 59             conn.setReadTimeout(5000);
 60             conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
 61             String data = "username=" + URLEncoder.encode(username, "utf-8") + "&password=" + password;
 62             conn.setRequestProperty("Content-Length", data.length() + "");
 63             //允許向外面寫數據
 64             conn.setDoOutput(true);
 65             //獲取輸出流
 66             OutputStream os = conn.getOutputStream();
 67             os.write(data.getBytes());
 68             int code = conn.getResponseCode();
 69             if(code == 200){
 70                 InputStream is = conn.getInputStream();
 71                 String result = StreamTools.readInputStream(is);
 72                 return result;
 73             }else{
 74                 System.out.println("----111");
 75                 return null;
 76             }
 77         } catch (Exception e) {
 78             // TODO Auto-generated catch block
 79             e.printStackTrace();
 80             System.out.println("----2222");
 81             return null;
 82         }
 83         
 84     }
 85     
 86     public static String loginByClientGet(String username, String password){
 87         try{
 88             //1、打開一個浏覽器
 89             HttpClient client = new DefaultHttpClient();
 90             
 91             //輸入地址ַ
 92             String path = "http://192.168.1.101/android/index.php?username=" + URLEncoder.encode(username, "utf-8") + "&password=" + password;
 93             HttpGet httpGet = new HttpGet(path);
 94             
 95             //敲回車
 96             HttpResponse response = client.execute(httpGet);
 97             
 98             //獲取返回狀態碼
 99             int code = response.getStatusLine().getStatusCode();
100             if(code == 200){
101                 InputStream is = response.getEntity().getContent();
102                 String result = StreamTools.readInputStream(is);
103                 return result;
104             }else{
105                 System.out.println("----111");
106                 return null;
107             }
108         }catch(Exception e){
109             e.printStackTrace();
110             System.out.println("----222");
111             return null;
112         }
113         
114     }
115     
116     public static String loginByClientPost(String username, String password){
117         try {
118             //�������
119             HttpClient client = new DefaultHttpClient();
120             
121             //�����ַ
122             String path = "http://192.168.1.101/android/index.php";
123             HttpPost httpPost = new HttpPost(path);
124             //ָ��Ҫ�ύ�����ʵ��
125             List<NameValuePair> parameters = new ArrayList<NameValuePair>();
126             parameters.add(new BasicNameValuePair("username",username));
127             parameters.add(new BasicNameValuePair("password",password));
128             
129             httpPost.setEntity(new UrlEncodedFormEntity(parameters,"utf-8"));
130             HttpResponse response = client.execute(httpPost);
131             //��ȡ�������
132             int code = response.getStatusLine().getStatusCode();
133             if(code == 200){
134                 InputStream is = response.getEntity().getContent();
135                 String result = StreamTools.readInputStream(is);
136                 return result;
137             }else{
138                 System.out.println("----111");
139                 return null;
140             }
141         } catch (Exception e) {
142             // TODO Auto-generated catch block
143             System.out.println("----222");
144             e.printStackTrace();
145             return null;
146         }
147     }
148 }

4、把輸入流轉換為字符串

package com.example.getdata.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class StreamTools {
    /*
     * 功能:把inputStream轉化為字符串
     */
    public static String readInputStream(InputStream is){
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int len=0;
            byte[] buffer = new byte[1024];
            while((len = is.read(buffer)) != -1){
                baos.write(buffer, 0, len);
            }
            baos.close();
            is.close();
            byte[] result = baos.toByteArray();
            return new String(result);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
        
    }
}

 5、清單文件

<uses-permission android:name="android.permission.INTERNET"/>//權限

最後:一般來說,子線程是無法改變UI的,但是這裡采用runOnUiThread方式是可以的,而不是采用發送消息的方式

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved