Android開(kāi)發(fā)使用URLConnection進(jìn)行網(wǎng)絡(luò)編程詳解
本文實(shí)例講述了Android開(kāi)發(fā)使用URLConnection進(jìn)行網(wǎng)絡(luò)編程。分享給大家供大家參考,具體如下:
URL的openConnection()方法將返回一個(gè)URLConnection,該對(duì)象表示應(yīng)用程序和URL之間的通信連接,程序可以通過(guò)URLConnection實(shí)例向該URL發(fā)送請(qǐng)求,讀取URL引用的資源。通常創(chuàng)建一個(gè)和URL的連接,并發(fā)送請(qǐng)求,讀取此URL引用的資源。
需要如下步驟:
a)通過(guò)調(diào)用URL對(duì)象openConnection()方法來(lái)創(chuàng)建URLConnection對(duì)象
b)設(shè)置URLConnection的參數(shù)和普通請(qǐng)求屬性
conn.setRequestProperty("accept","*/*");
conn.setRequestProperty("connection","Keep-Alive");
conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
conn.setDoInput(true):設(shè)置該URLConnection的doInput請(qǐng)求頭字段的值
coon.setDoOutput(true):
c)調(diào)用connect():打開(kāi)到此URL引用的資源的通信鏈接(如果尚未建立這樣的連接)。
如果在已打開(kāi)連接(此時(shí) connected 字段的值為 true)的情況下調(diào)用 connect 方法,則忽略該調(diào)用.
URLConnection 對(duì)象經(jīng)歷兩個(gè)階段:首先創(chuàng)建對(duì)象,然后建立連接。
在創(chuàng)建對(duì)象之后,建立連接之前,可指定各種選項(xiàng)(例如doInput和UseCaches).連接后再進(jìn)行設(shè)置就會(huì)發(fā)生錯(cuò)誤。連接后才能進(jìn)行的操作(例如getContentLength),如有必要,將隱式執(zhí)行連接.
d)如果只是發(fā)送GET方式請(qǐng)求,使用connect方法建立和遠(yuǎn)程資源之間的實(shí)際連接即可,在請(qǐng)求的地址中傳入數(shù)據(jù)。
如果需要發(fā)送Post方法請(qǐng)求。需要獲取URLConnection實(shí)例對(duì)應(yīng)的輸出流來(lái)發(fā)送請(qǐng)求參數(shù),
PrintWriter out=new PrintWriter(conn.getOutputStream());
//解決亂碼問(wèn)題
String n=EncodingUtils.getString("張三".getBytes(),"UTF-8");
out.write("name="+n+"&pwd="+pwd);
out.flush();//刷新輸出流的緩沖
e)遠(yuǎn)程資源變?yōu)榭捎?,程序可以訪(fǎng)問(wèn)遠(yuǎn)程資源的頭字段或通過(guò)輸入流讀取遠(yuǎn)程資源的數(shù)據(jù)。
getInputStream()獲取輸入流。
從輸入流讀取response的數(shù)據(jù)。
注意:
1)如果既要使用輸入流讀取URLConnection響應(yīng)的內(nèi)容,也要使用輸出流發(fā)送請(qǐng)求參數(shù),一定要先使用輸出流,再使用輸入流。
2)借助于URLConnection類(lèi)的幫助,應(yīng)用程序可以非常方便地與指定站點(diǎn)交換信息,包括發(fā)送GET請(qǐng)求,POST請(qǐng)求,并獲取網(wǎng)站的響應(yīng)等。
代碼編寫(xiě)步驟如下:
1.先寫(xiě)一個(gè)服務(wù)器-web工程
新建一個(gè)Servlet--LoginServlet,簡(jiǎn)單實(shí)現(xiàn)用戶(hù)的登錄~
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
System.out.println(name+" "+pwd);
OutputStream os=response.getOutputStream();
if("xuxu".equals(name)&&"123".equals(pwd)){
os.write(("成功").getBytes("UTF-8"));
}else{
os.write(("失敗").getBytes("UTF-8"));
}
os.flush();
os.close();
}
}
2.新建一個(gè)android項(xiàng)目,在MainActivity中分別使用get方法和post方法實(shí)現(xiàn)用戶(hù)的登錄
public class MainActivity extends Activity {
private EditText name,pwd;
public void get(View view){
new Thread(){
public void run() {
try {
URL url=new URL("http://169.254.244.141:8090/ConnectionServlet/LoginServlet"+
"?name="+name+"&pwd="+pwd);
URLConnection conn=url.openConnection();
conn.connect();//真正的建立網(wǎng)絡(luò)連接
BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line=null;
StringBuffer stringBuffer=new StringBuffer();//字符串,都可以存儲(chǔ)和操作字符串,它是變量
while ((line=reader.readLine())!=null) {
stringBuffer.append(line);
}
System.out.println(stringBuffer.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
public void post(View view){
new Thread(){
public void run() {
try {
URL url=new URL("http://169.254.244.141:8090/ConnectionServlet/LoginServlet"
);
URLConnection conn=url.openConnection();
//必須設(shè)置
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();//真正的建立網(wǎng)絡(luò)連接
PrintWriter printWriter=new PrintWriter(conn.getOutputStream());
printWriter.write("name="+name+"&pwd="+pwd);
printWriter.flush();
printWriter.close();
BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line=null;
StringBuffer stringBuffer=new StringBuffer();
while ((line=reader.readLine())!=null) {
stringBuffer.append(line);
}
System.out.println(stringBuffer.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name=(EditText) findViewById(R.id.name);
pwd=(EditText) findViewById(R.id.pwd);
}
}
3.運(yùn)行,把Tomcat打開(kāi)~
效果圖如下:

附:完整實(shí)例代碼點(diǎn)擊此處本站下載。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android通信方式總結(jié)》、《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android調(diào)試技巧與常見(jiàn)問(wèn)題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android使用URLConnection提交請(qǐng)求的實(shí)現(xiàn)
- Android HttpURLConnection.getResponseCode()錯(cuò)誤解決方法
- Android 中HttpURLConnection與HttpClient使用的簡(jiǎn)單實(shí)例
- Android中HttpURLConnection與HttpClient的使用與封裝
- Android中使用HttpURLConnection實(shí)現(xiàn)GET POST JSON數(shù)據(jù)與下載圖片
- Android通過(guò)HttpURLConnection和HttpClient接口實(shí)現(xiàn)網(wǎng)絡(luò)編程
- Golang+Android基于HttpURLConnection實(shí)現(xiàn)的文件上傳功能示例
- Android開(kāi)發(fā)使用HttpURLConnection進(jìn)行網(wǎng)絡(luò)編程詳解【附源碼下載】
- android 網(wǎng)絡(luò)編程之網(wǎng)絡(luò)通信幾種方式實(shí)例分享
- Android網(wǎng)絡(luò)編程之UDP通信模型實(shí)例
相關(guān)文章
基于Android實(shí)現(xiàn)保存圖片到本地并可以在相冊(cè)中顯示出來(lái)
App應(yīng)用越來(lái)越人性化,不僅界面優(yōu)美而且服務(wù)也很多樣化,操作也非常方便。通過(guò)本篇文章給大家介紹基于Android實(shí)現(xiàn)保存圖片到本地并可以在相冊(cè)中顯示出來(lái),對(duì)android保存圖片相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12
簡(jiǎn)單實(shí)現(xiàn)Android刮刮卡效果
這篇文章主要教大家如何簡(jiǎn)單的實(shí)現(xiàn)Android刮刮卡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
android開(kāi)發(fā)中獲取手機(jī)分辨率大小的方法
不管是在我們的布局還是在實(shí)現(xiàn)代碼中進(jìn)行操控,我們的靈活性都不是局限于一個(gè)固定的數(shù)值,而是面對(duì)不同的手機(jī)對(duì)象都有一個(gè)適應(yīng)的數(shù)值。2013-04-04
android實(shí)現(xiàn)自動(dòng)關(guān)機(jī)的具體方法
android實(shí)現(xiàn)自動(dòng)關(guān)機(jī)的具體方法,需要的朋友可以參考一下2013-06-06
解決android 顯示內(nèi)容被底部導(dǎo)航欄遮擋的問(wèn)題
今天小編就為大家分享一篇解決android 顯示內(nèi)容被底部導(dǎo)航欄遮擋的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Android 接收推送消息跳轉(zhuǎn)到指定頁(yè)面的方法
這篇文章主要介紹了Android 接收推送消息跳轉(zhuǎn)到指定頁(yè)面的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Android Studio 3.6中新的視圖綁定工具ViewBinding 用法詳解
這篇文章主要介紹了Android Studio 3.6中新的視圖綁定工具ViewBinding 用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Android自定義ImageView實(shí)現(xiàn)點(diǎn)擊兩張圖片切換效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ImageView實(shí)現(xiàn)點(diǎn)擊兩張圖片切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android應(yīng)用程序的編譯流程及使用Ant編譯項(xiàng)目的攻略
這篇文章主要介紹了Android應(yīng)用程序的編譯流程及使用Ant編譯項(xiàng)目的攻略,Ant是集編譯測(cè)試部署于一體的Java自動(dòng)化工具,要的朋友可以參考下2016-04-04

