最近在做一个小项目,项目开发中需要实现一个登录验证功能,具体的要求就是,在Android端输入用户名和密码,在服务器端验证MySQL数据库中是否有此用户,实现之前当然首要的是,如何使Android端的数据发送到服务器端,具体的实现方法:
服务器端:ManageServlet.java
public class ManageServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");String name = request.getParameter("name");String password = request.getParameter("password");System.out.println("用户名:"+name+" 密码:"+password);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}}
在这里实现的仅仅是把用户端的数据在控制台打印出来,相信学过jsp开发的大神,剩下的数据验证应该不在话下,在此不再赘述。
接下来就是Android端了:
主activity:MainActivity.java
public class MainActivity extends Activity {private EditText textname = null;private EditText textpassword = null;private Button button = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textname = (EditText)findViewById(R.id.name);textpassword = (EditText)findViewById(R.id.password);button = (Button)findViewById(R.id.button);button.setOnClickListener(new mybuttonlistener());}class mybuttonlistener implements OnClickListener{boolean result=false;String name;String password;public void onClick(View v) {try { name = textname.getText().toString();name = new String(name.getBytes("ISO8859-1"), "UTF-8");password = textpassword.getText().toString();password = new String(password.getBytes("ISO8859-1"), "UTF-8");} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}try {result = NewsService.save(name,password);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}if(result){Toast.makeText(MainActivity.this, R.string.ok, Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_SHORT).show();}}}}
布局文件:
<RelativeLayout 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"tools:context="${relativePackage}.${activityClass}" ><LinearLayout android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/name" /><EditText android:id="@+id/name"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="@string/playname"android:singleLine="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/password" /><EditText android:id="@+id/password"android:layout_width="fill_parent"android:layout_height="wrap_content"android:password="true"android:hint="@string/playpass"android:singleLine="true"/><Button android:id="@+id/button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:onClick=""android:text="@string/submit"/></LinearLayout>
</RelativeLayout>
用于向服务器端发送数据的service(NewsService):
public class NewsService {/*** 登录验证* @param name 姓名* @param password 密码* @return*/public static boolean save(String name, String password){String path = "http://192.168.1.104:8080/Register/ManageServlet"; Map<String, String> student = new HashMap<String, String>();student.put("name", name);student.put("password", password);try {return SendGETRequest(path, student, "UTF-8");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return false;}/*** 发送GET请求* @param path 请求路径* @param student 请求参数* @return 请求是否成功* @throws Exception*/private static boolean SendGETRequest(String path, Map<String, String> student, String ecoding) throws Exception{// http://127.0.0.1:8080/Register/ManageServlet?name=1233&password=abcStringBuilder url = new StringBuilder(path);url.append("?");for(Map.Entry<String, String> map : student.entrySet()){url.append(map.getKey()).append("=");url.append(URLEncoder.encode(map.getValue(), ecoding));url.append("&");}url.deleteCharAt(url.length()-1);System.out.println(url);HttpsURLConnection conn = (HttpsURLConnection)new URL(url.toString()).openConnection();conn.setConnectTimeout(100000);conn.setRequestMethod("GET");if(conn.getResponseCode() == 200){return true;}return false;}}
红色的为自己电脑的IP地址。
因为需要连接网络,一定要在AndroidManifest.xml进行网络权限配置:
<uses-permission android:name="android.permission.INTERNET"/>
写到这里基本已经把Android向服务器端发送数据,给大家分享完毕,如有不对的地方还望指正。