天天看點

android 連接配接遠端資料庫(轉)

     想實作一個功能即讓android通路遠端資料庫,但是網上很多人都不建議直連。據說問題多多。那麼中間就加個第三者吧。

     實作思路:在資料庫和android用戶端添加一個webservice,處理每次用戶端發來的請求。而在android用戶端使用ksoap2解析webservice傳回的資料。

    一 webservice 端,我使用序列化的方式實作的。不知道這裡跟xml的實作哪個對手機來說更好。這裡先放下,以後研究。

       1.我使用的是xfire。建立一個webservice項目,然後我們開始寫代碼

        2.一個接口

Java代碼  

android 連接配接遠端資料庫(轉)
  1. public interface ICompany {  
  2.     public List<Company> getCompanyList();  
  3. }  

     3一個實作類

Java代碼  

android 連接配接遠端資料庫(轉)
  1. public class ICompanyImp implements ICompany {  
  2.     CompanyDAO comdao=new CompanyDAO();  
  3.     //得到所有公司清單  
  4.     public List<Company> getCompanyList() {  
  5.         List<Company> list=new ArrayList<Company>();  
  6.         try {  
  7.             list=comdao.getCompanyList();  
  8.         } catch (SQLException e) {  
  9.             e.printStackTrace();  
  10.             list=null;  
  11.         }  
  12.         return list;  
  13.     }  
  14. }  

  注意: 我這裡的傳回值是list,不少webservice的基本類型,是以需要為它配置檔案  接口+.aegis.xml

4 接口+.aegis.xml

Xml代碼  

android 連接配接遠端資料庫(轉)
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <mappings>  
  3.     <mapping>  
  4.     <!--    
  5.         <method name="getCollectionsRowCount">  
  6.             <parameter index="0" componentType="java.lang.String"/>  
  7.         </method>  
  8.         -->  
  9.         <!-- 傳回的類型是Map的話,做法和List一樣。但定義的類型,是Map中的Value部分 -->  
  10.         <method name="getCompanyList">   
  11.             <return-type componentType="bean.Company"/>  
  12.         </method>  
  13.     </mapping>  
  14. </mappings>  

5.service.xml

Xml代碼  

android 連接配接遠端資料庫(轉)
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans >  
  3. <service xmlns="http://xfire.codehaus.org/config/1.0"  
  4.        xmlns:s="http://www.springframework.org/schema/beans"  
  5.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  8.         <name>MyService</name>  
  9.         <serviceClass>main.service.ICompany</serviceClass>  
  10.         <implementationClass>main.service.ICompanyImp</implementationClass>  
  11.         <style mce_bogus="1">wrapped</style>  
  12.         <use>literal</use>  
  13.         <scope>application</scope>  
  14.         <namespace>http://android.googlepages.com/</namespace>  
  15.     </service>  
  16. </beans>  

釋出項目後,運作效果如圖:

android 連接配接遠端資料庫(轉)

項目結構:

android 連接配接遠端資料庫(轉)

二 android用戶端

 因為ksoap2解析webservice得到的資料類似于以下:getCompanyListResponse{out=anyType{Company=anyType{company=安徽江淮汽車股份有限公司; id=1; }; }; }

  1 解析類:MyWebServiceHelper

Java代碼  

android 連接配接遠端資料庫(轉)
  1. public class MyWebServiceHelper {  
  2.     // WSDL文檔中的命名空間     
  3.     private static final String targetNameSpace = "http://android.googlepages.com/";    
  4.     // WSDL文檔中的URL     
  5.     private static final String WSDL = "http://192.168.1.144:8080/oilservice/services/MyService";    
  6.     // 需要調用的方法名(獲得Myervices中的helloWorld方法)     
  7.     //需要調用的方法名(獲得Myervices中的login方法)     
  8.     private static final String getCompany="getCompanyList";    
  9.     public List<Company>  getCompanyList( ) {    
  10.         List<Company> list=new ArrayList<Company>();  
  11.         SoapObject request =new SoapObject(targetNameSpace,getCompany);  
  12.         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(    
  13.                 SoapEnvelope.VER11);   
  14.         envelope.dotNet = false;   
  15.         envelope.setOutputSoapObject(request);   
  16.         AndroidHttpTransport  httpTranstation = new AndroidHttpTransport (WSDL);   
  17.         try {    
  18.             httpTranstation.call(targetNameSpace+getCompany, envelope);    
  19.                 SoapObject soapObject = (SoapObject) envelope.getResponse();   
  20.                 //如果擷取的是個集合,就對它進行下面的操作  
  21.                 if(soapObject.getName()=="anyType") {  
  22.                     //周遊Web Service獲得的集合  
  23.                     for(int i=0;i<soapObject.getPropertyCount();i++){  
  24.                         Company m=new Company();  
  25.                         //擷取單條的資料  
  26.                         SoapObject soapChilds =(SoapObject)soapObject.getProperty(i);  
  27.                         //對單個的資料進行再次周遊,把它的每行資料讀取出來  
  28.                             m.setId(Integer.parseInt(soapChilds.getProperty("id").toString()));  
  29.                             m.setCompany(soapChilds.getProperty("company").toString());  
  30.                        // }  
  31.                         list.add(m);  
  32.                     }  
  33.             }  
  34.         } catch (IOException e) {    
  35.             e.printStackTrace();    
  36.         } catch (XmlPullParserException e) {    
  37.             e.printStackTrace();    
  38.         }    
  39.         return list;    
  40.     }    
  41. }    

2 實作類:

Java代碼  

android 連接配接遠端資料庫(轉)
  1. public class OilActivity extends Activity {  
  2.     @Override  
  3.     public void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.main);  
  6.         Spinner spinner = (Spinner) findViewById(R.id.company);  
  7.         ArrayAdapter<String>  adapter = new ArrayAdapter<String>(  
  8.                 this,android.R.layout.simple_spinner_item);  
  9.         adapter.setDropDownViewResource(  
  10.                 android.R.layout.simple_spinner_dropdown_item);  
  11.        //調用自已寫的webService     
  12.         MyWebServiceHelper webServiceHelper=new MyWebServiceHelper();  
  13.       List<Company> compnayList=  webServiceHelper.getCompanyList();  
  14.       for(int i=0;i<compnayList.size();i++){  
  15.           adapter.add(compnayList.get(i).getCompany());  
  16.       }  
  17.         spinner.setAdapter(adapter);  
  18.     }  
  19. }  

 3 兩個項目中都用到的bean

Java代碼  

android 連接配接遠端資料庫(轉)
  1. public class Company implements Serializable{  
  2.     private static final long serialVersionUID = 1L;  
  3.     private int id;  
  4.     private String company;  
  5.     public int getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(int id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getCompany() {  
  12.         return company;  
  13.     }  
  14.     public void setCompany(String company) {  
  15.         this.company = company;  
  16.     }  
  17. }  

最後測試以下,list傳回正确。效果圖:

android 連接配接遠端資料庫(轉)

3項目結構:

android 連接配接遠端資料庫(轉)

   參考文章:

http://ksoap2.sourceforge.net/doc/api/ ksoap2的API

http://topic.csdn.net/u/20110412/16/0341626d-8576-4dda-b9e4-aab3ff50c980.html 關于list處理的文章

http://blog.csdn.net/haha_mingg/article/details/6338332,總的思路的實作。在此感謝作者的無私奉獻

android 初學,願與大家互相交流。共同進步。

  • oilservice.rar (672.9 KB)
  • 下載下傳次數: 15
  • oil.rar (173.8 KB)
  • 下載下傳次數: 13
  • 檢視圖檔附件