Android开发使用POST方式向服务器请求和发送数据
前面说了GET方式。现在尝试一下POST
#1.首先先用新建个servlet处理登陆请求
package com.wzw.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class LoginServlet */ public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username=request.getParameter("username"); String password=request.getParameter("password"); if(username.equals("admin")&&password.equals("123456")){ response.getWriter().println("success"); }else{ response.getWriter().println("failed"); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub
<span style="white-space:pre"> </span>this.doGet(request,response); } }
#2.布局文件也很简单
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <EditText android:layout_marginTop="10dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/et_username" android:hint="请输入名字"/> <EditText android:layout_marginTop="10dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/et_password" android:hint="请输入密码"/> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:onClick="doGet" android:text="GET方式提交"/> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:onClick="doPost" android:text="POST方式提交"/> </LinearLayout>
#3在mainactivity中实现方法
package com.wzw.submitdata; import com.wzw.submitdata.utils.NetUtil; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText etUsername; private EditText etPassword; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etUsername = (EditText) findViewById(R.id.et_username); etPassword = (EditText) findViewById(R.id.et_password); } public void doGet(View v){ final String username=etUsername.getText().toString(); final String password=etPassword.getText().toString(); new Thread(new Runnable() { @Override public void run() { //访问网络要在子线程中实现,使用get取数据 final String state=NetUtil.loginOfGet(username, password); //执行在主线程上 runOnUiThread(new Runnable() { public void run() { //就是在主线程上操作,弹出结果 Toast.makeText(MainActivity.this, state, 0).show(); } }); } }).start(); } public void doPost(View v){ final String username=etUsername.getText().toString(); final String password=etPassword.getText().toString(); new Thread(new Runnable() { @Override public void run() { final String state=NetUtil.LoginOfPost(username, password); //执行在主线程上 runOnUiThread(new Runnable() { public void run() { //就是在主线程上操作,弹出结果 Toast.makeText(MainActivity.this, state, 0).show(); } }); } }).start(); } }
#4.具体处理GET和POST的方法
package com.wzw.submitdata.utils; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class NetUtil { /** * 使用GET访问去访问网络 * @param username * @param password * @return 服务器返回的结果 */ public static String loginOfGet(String username,String password){ HttpURLConnection conn=null; try { String data="username="+username+"&password="+password; URL url=new URL("http://192.168.1.4:8080/AndroidServer/LoginServlet?"+data); conn=(HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(10000); conn.setReadTimeout(5000); conn.connect(); int code=conn.getResponseCode(); if(code==200){ InputStream is=conn.getInputStream(); String state=getStringFromInputStream(is); return state; } } catch (Exception e) { e.printStackTrace(); }finally{ if(conn!=null){ conn.disconnect(); } } return null; } /** * 使用POST访问去访问网络 * @param username * @param password * @return */ public static String LoginOfPost(String username,String password){ HttpURLConnection conn=null; try { URL url=new URL("http://192.168.1.4:8080/AndroidServer/LoginServlet"); conn=(HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setConnectTimeout(10000); conn.setReadTimeout(5000); conn.setDoOutput(true); //post请求的参数 String data="username="+username+"&password="+password; OutputStream out=conn.getOutputStream(); out.write(data.getBytes()); out.flush(); out.close(); conn.connect(); int code=conn.getResponseCode(); if(code==200){ InputStream is=conn.getInputStream(); String state=getStringFromInputStream(is); return state; } } catch (Exception e) { e.printStackTrace(); }finally{ if(conn!=null){ conn.disconnect(); } } return null; } /** * 根据输入流返回一个字符串 * @param is * @return * @throws Exception */ private static String getStringFromInputStream(InputStream is) throws Exception{ ByteArrayOutputStream baos=new ByteArrayOutputStream(); byte[] buff=new byte[1024]; int len=-1; while((len=is.read(buff))!=-1){ baos.write(buff, 0, len); } is.close(); String html=baos.toString(); baos.close(); return html; } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。