您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么在Android中使用URLConnection實現網絡編程,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
具體如下:
URL的openConnection()
方法將返回一個URLConnection,該對象表示應用程序和URL之間的通信連接,程序可以通過URLConnection實例向該URL發送請求,讀取URL引用的資源。通常創建一個和URL的連接,并發送請求,讀取此URL引用的資源。
需要如下步驟:
a)通過調用URL對象openConnection()
方法來創建URLConnection對象
b)設置URLConnection的參數和普通請求屬性
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");
發送POST請求必須設置如下兩行
conn.setDoInput(true)
:設置該URLConnection的doInput請求頭字段的值coon.setDoOutput(true)
:
c)調用connect()
:打開到此URL引用的資源的通信鏈接(如果尚未建立這樣的連接)。
如果在已打開連接(此時 connected 字段的值為 true)的情況下調用 connect 方法,則忽略該調用.
URLConnection 對象經歷兩個階段:首先創建對象,然后建立連接。
在創建對象之后,建立連接之前,可指定各種選項(例如doInput和UseCaches).連接后再進行設置就會發生錯誤。連接后才能進行的操作(例如getContentLength),如有必要,將隱式執行連接.
d)如果只是發送GET方式請求,使用connect方法建立和遠程資源之間的實際連接即可,在請求的地址中傳入數據。
如果需要發送Post方法請求。需要獲取URLConnection實例對應的輸出流來發送請求參數,
PrintWriter out=new PrintWriter(conn.getOutputStream()); //解決亂碼問題 String n=EncodingUtils.getString("張三".getBytes(),"UTF-8"); out.write("name="+n+"&pwd="+pwd); out.flush();//刷新輸出流的緩沖
e)遠程資源變為可用,程序可以訪問遠程資源的頭字段或通過輸入流讀取遠程資源的數據。
getInputStream()
獲取輸入流。
從輸入流讀取response的數據。
注意:
1)如果既要使用輸入流讀取URLConnection響應的內容,也要使用輸出流發送請求參數,一定要先使用輸出流,再使用輸入流。
2)借助于URLConnection類的幫助,應用程序可以非常方便地與指定站點交換信息,包括發送GET請求,POST請求,并獲取網站的響應等。
代碼編寫步驟如下:
1.先寫一個服務器-web工程
新建一個Servlet--LoginServlet,簡單實現用戶的登錄~
@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.新建一個android項目,在MainActivity中分別使用get方法和post方法實現用戶的登錄
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();//真正的建立網絡連接 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(); } 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(); //必須設置 conn.setDoInput(true); conn.setDoOutput(true); conn.connect();//真正的建立網絡連接 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); } }
關于怎么在Android中使用URLConnection實現網絡編程就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。