下面例子为使用HttpUrlConnection的一个登录服务器的小例子。
package com.liang.logindemo; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.Toast; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; public class MainActivity extends ActionBarActivity { private EditText et_userName; private EditText et_password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_userName= (EditText) findViewById(R.id.et_userName); et_password= (EditText) findViewById(R.id.et_password); } public void login(View view) { String str=et_userName.getText().toString(); try { str=URLEncoder.encode(str,"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } final String userName=str; final String password=et_password.getText().toString(); //在子线程中访问网络 new Thread(new Runnable() { @Override public void run() { try { //final boolean isSuccess =loginByPost(userName,password); final boolean isSuccess = loginByGet(userName,password); //使用此方法可不使用Handler通知主线程,方法内所做操作由主线程完成 runOnUiThread(new Runnable() { @Override public void run() { if(isSuccess){ Toast.makeText(MainActivity.this,"成功!!!",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this,"失败!!!",Toast.LENGTH_SHORT).show(); } } }); } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** * HttpUrlConnection通过GET请求方式访问服务器 * @param userName,password * @return * @throws Exception */ private Boolean loginByGet(String userName,String password) throws Exception{ //服务器地址 String url="http://192.168.1.58:8080/Login/servlet/Login"; String data="?userName="+userName + "&password="+password; HttpURLConnection conn=null; InputStream is=null; BufferedReader reader=null; try { //定义一个URL URL murl=new URL(url+data); //打开连接获得HttpURLConnection conn = (HttpURLConnection) murl.openConnection(); //设置请求方式 conn.setRequestMethod("GET"); //设置访问网络超时时间,超出时间会抛出异常 conn.setConnectTimeout(5 * 1000); //设置读取超时时间 conn.setReadTimeout(3 * 1000); //连接网络 conn.connect(); //获得返回的状态码 int code = conn.getResponseCode(); //200为正常响应 if(code==200){ //获得响应内容的输入流 is = conn.getInputStream(); //读取内容 reader=new BufferedReader(new InputStreamReader(is)); String state = reader.readLine(); if("SUCCESS".equals(state)){ return true; }else{ return false; } } } catch (Exception e) { throw e; } finally { if(reader!=null){ reader.close(); } if(is!=null){ is.close(); } //关闭连接 conn.disconnect(); } return false; } /** *HttpUrlConnection通过POST请求方式访问服务器 * @param userName * @param password * @return * @throws Exception */ boolean loginByPost(String userName,String password) throws Exception{ String url="http://192.168.1.58:8080/Login/servlet/Login"; HttpURLConnection conn=null; InputStream is=null; BufferedReader reader=null; OutputStream outputStream; String data="userName="+userName+"&password="+password; try { URL murl=new URL(url); conn = (HttpURLConnection) murl.openConnection(); conn.setRequestMethod("POST"); conn.setConnectTimeout(5 * 1000); conn.setReadTimeout(3 * 1000); //设置允许打开输出流,默认为不打开 conn.setDoOutput(true); //设置请求头信息,可设置多个 //conn.setRequestProperty(key,value); //获得输出流,用于往服务器写入数据 outputStream = conn.getOutputStream(); outputStream.write(data.getBytes()); outputStream.flush(); outputStream.close(); conn.connect(); int code = conn.getResponseCode(); if(code==200){ is = conn.getInputStream(); reader=new BufferedReader(new InputStreamReader(is)); String state = reader.readLine(); if("SUCCESS".equals(state)){ return true; }else{ return false; } } } catch (Exception e) { throw e; } finally { if(reader!=null){ reader.close(); } if(is!=null){ is.close(); } conn.disconnect(); } return false; } }
布局两个输入框一个提交按钮,比较简单,就不列出了。
注意在清单文件中添加网络访问权限
时间: 2024-10-13 16:26:30