android的web服务

本文概述

  • Android Restful Web服务教程
  • 什么是Web服务?
  • Android Restful Web服务示例
  • 使用oracle数据库的Java Servlet登录和注册示例
在android中创建Web服务应用程序并非难事。我们可以使用android,.net,php等语言开发的其他应用程序轻松地在android中创建一个宁静的Web服务应用程序,以将信息认证或保存到外部数据库,例如oracle,mysql,postgre sql,sql server。那就是我们要做的。
Android Restful Web服务教程在开发Web服务应用程序之前,你必须具有SOAP和Restful Web服务的基本知识。因此,我们将讨论有关Web服务的基本要点,例如什么是Web服务以及有关SOAP和Restful Web服务的简要信息。
什么是Web服务?Web服务是用于在不同类型的应用程序之间交换信息的标准,而与语言和平台无关。例如,Android应用程序可以使用Web服务与Java或.net应用程序进行交互。
Android Restful Web服务示例
< 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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" >< EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:hint="Username" android:ems="10" >< requestFocus /> < /EditText>< EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginTop="67dp" android:ems="10" android:hint="Password" android:inputType="textPassword" />< Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="24dp" android:layout_toRightOf="@+id/button1" android:text="New User" />< ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/editText2" android:layout_marginTop="22dp" />< Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText2" android:layout_below="@+id/progressBar1" android:layout_marginLeft="22dp" android:text="Login" />< /RelativeLayout>

文件:activity_register_user.xml
< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" >< EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="15dp" android:ems="10" android:hint="Enter UserName" />< EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginTop="50dp" android:ems="10" android:hint="Enter Password" android:inputType="textPassword" />< Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="Resister" />< ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/editText2" android:layout_marginTop="87dp" />< /RelativeLayout>

MainActivity类
package com.example.newrestapi; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Toast; public class MainActivity extends Activity { EditText password, userName; Button login, resister; ProgressBar progressBar; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); password=(EditText) findViewById(R.id.editText2); userName=(EditText) findViewById(R.id.editText1); login=(Button) findViewById(R.id.button1); resister=(Button) findViewById(R.id.button2); //progess_msz.setVisibility(View.GONE); progressBar=(ProgressBar) findViewById(R.id.progressBar1); progressBar.setVisibility(View.GONE); resister.setOnClickListener(new OnClickListener() {@Override public void onClick(View arg0) { // TODO Auto-generated method stub Intentintent=new Intent(MainActivity.this, ResisterUser.class); startActivity(intent); } }); login.setOnClickListener(new OnClickListener() {public void onClick(View v) { progressBar.setVisibility(View.VISIBLE); String s1=userName.getText().toString(); String s2=password.getText().toString(); new ExecuteTask().execute(s1, s2); } }); } class ExecuteTask extends AsyncTask< String, Integer, String> {@Override protected String doInBackground(String... params) {String res=PostData(params); return res; }@Override protected void onPostExecute(String result) { progressBar.setVisibility(View.GONE); //progess_msz.setVisibility(View.GONE); Toast.makeText(getApplicationContext(), result, 3000).show(); }} public String PostData(String[] valuse) { String s=""; try { HttpClient httpClient=new DefaultHttpClient(); HttpPost httpPost=new HttpPost("http://10.0.0.8:7777/HttpPostServlet/servlet/Login"); List< NameValuePair> list=new ArrayList< NameValuePair>(); list.add(new BasicNameValuePair("name", valuse[0])); list.add(new BasicNameValuePair("pass", valuse[1])); httpPost.setEntity(new UrlEncodedFormEntity(list)); HttpResponse httpResponse= httpClient.execute(httpPost); HttpEntity httpEntity=httpResponse.getEntity(); s= readResponse(httpResponse); } catch(Exception exception){} return s; } public String readResponse(HttpResponse res) { InputStream is=null; String return_text=""; try { is=res.getEntity().getContent(); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is)); String line=""; StringBuffer sb=new StringBuffer(); while ((line=bufferedReader.readLine())!=null) { sb.append(line); } return_text=sb.toString(); } catch (Exception e) {} return return_text; } }

RegisterUser类
package com.example.newrestapi; import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; public class ResisterUser extends Activity { EditText userName, passwprd; Button resister, login; ProgressBar progressBar; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_resister_user); userName=(EditText) findViewById(R.id.editText1); ; passwprd=(EditText) findViewById(R.id.editText2); resister=(Button) findViewById(R.id.button1); progressBar=(ProgressBar) findViewById(R.id.progressBar1); progressBar.setVisibility(View.GONE); resister.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) {progressBar.setVisibility(View.VISIBLE); String s1=userName.getText().toString(); String s2=passwprd.getText().toString(); new ExecuteTask().execute(s1, s2); } }); }class ExecuteTask extends AsyncTask< String, Integer, String> {@Override protected String doInBackground(String... params) {PostData(params); return null; }@Override protected void onPostExecute(String result) { progressBar.setVisibility(View.GONE); }}public void PostData(String[] valuse) { try { HttpClient httpClient=new DefaultHttpClient(); HttpPost httpPost=new HttpPost( "http://10.0.0.8:7777/HttpPostServlet/servlet/httpPostServlet"); List< NameValuePair> list=new ArrayList< NameValuePair>(); list.add(new BasicNameValuePair("name", valuse[0])); list.add(new BasicNameValuePair("pass", valuse[1])); httpPost.setEntity(new UrlEncodedFormEntity(list)); httpClient.execute(httpPost); } catch(Exception e) { System.out.println(e); }}}

你需要在AndroidManifest.xml文件中提供INTERNET权限。
< ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.newrestapi" android:versionCode="1" android:versionName="1.0" >< uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />< uses-permission android:name="android.permission.INTERNET" />< application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > < activity android:name="com.example.newrestapi.MainActivity" android:label="@string/app_name" > < intent-filter> < action android:name="android.intent.action.MAIN" />< category android:name="android.intent.category.LAUNCHER" /> < /intent-filter> < /activity> < activity android:name="com.example.newrestapi.ResisterUser" android:label="@string/title_activity_resister_user" > < /activity> < /application>< /manifest>

输出:
android的web服务

文章图片
android的web服务

文章图片
使用oracle数据库的Java Servlet登录和注册示例在oracle数据库中创建具有三列id,name和password的表srcmini_user。 ID必须是主键,并且是通过SEQUENCE生成的。
CREATE TABLE"srcmini_USER" ( "ID" NUMBER, "NAME" VARCHAR2(4000), "PASSWORD" VARCHAR2(4000), CONSTRAINT "srcmini_USER_PK" PRIMARY KEY ("ID") ENABLE ) /

【android的web服务】新创建两个servlet类来登录和注册用户。
登录Servlet类
package server; import java.io.IOException; import java.io.ObjectOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Login extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); ObjectOutputStream out=new ObjectOutputStream(response.getOutputStream()); String n=request.getParameter("name"); String p=request.getParameter("pass"); System.out.println(n); System.out.println(p); if(validate(n, p)){ out.writeObject("success"); } else{ out.writeObject("Sorry username or password error"); }out.close(); } public static boolean validate(String name, String pass){ boolean status=false; try{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle"); PreparedStatement ps=con.prepareStatement( "select * from srcmini_user where name=? and password=?"); ps.setString(1, name); ps.setString(2, pass); ResultSet rs=ps.executeQuery(); status=rs.next(); }catch(Exception e){System.out.println(e); } return status; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

httpPostServlet Servlet类
package server; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class httpPostServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); String recived_data=""; String s1=request.getParameter("name"); String s2=request.getParameter("pass"); System.out.println(s1); System.out.println(s2); try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle"); PreparedStatement ps=con.prepareStatement( "insert into srcmini_user(name, password) values(?, ?)"); ps.setString(1, s1); ps.setString(2, s2); ps.executeUpdate(); con.close(); } catch (Exception e) { e.printStackTrace(); }} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

index.jsp
< form action="servlet/Login"> Name:< input type="text" name="name"/>< br/> Password:< input type="password" name="pass"/>< br/> < input type="submit" value="http://www.srcmini.com/login"/> < /form>

    推荐阅读