2012-12-23 115 views
0

我正在開發一個Android應用程序,其中所有數據都來自PHP Web服務。現在我很困惑,如何做到這一點。哪些Web服務(ksoap,soap,rest等)我應該在PHP中開發,這樣當我在Android中調用該Web服務時,它是輕量級的?我需要爲這種類型的應用程序做些什麼?另外目前我在本地進行應用程序,所以PHP將從mysql數據庫中獲取數據。請建議我應該開發哪些Web服務。我如何在Android應用程序中調用它?另外我想知道,無論如何,我可以在Android中開發Web服務,因爲我只有靜態數據可以通過,並且可能需要輸入2或3個數據。如何在Android應用程序中調用PHP Web服務?

回答

0

由於您需要小數據,而且這也是本地的,所以最好去REST,因爲它不需要任何額外的東西,如KSOAP或其他任何東西。如果分佈式環境存在,那麼SOAP是更好的。我認爲REST很好。

Here是一個鏈接,你可以檢查。

+0

REST可以用於從數據庫中獲取數據嗎?我的意思是我沒有使用在線網站數據。我只使用筆記本電腦的本地數據。 – Dhwani

+0

@Dhwani你有web服務,這將返回你從數據庫中獲取數據,所以你必須在webservice.u中實現,可以看到在我提供的鏈接中,並且你必須在你的android prpject中獲取這些數據並解析它使用json解析技術或xml解析技術。 –

+0

好的,謝謝。我瀏覽了你的網站。它幫助了我。但我有一點查詢,它是基本的Web服務,但什麼類型(REST/SOAP)? – Dhwani

1

我不會建議你使用SOAP,但實現起來並不舒服。 我花了很多時間來解析來自SOAP服務的這些元素,我建議你實施JSON webservice。

/*web service parameters*/ 
    private static final String TAG = RestSearchResultList.class.getSimpleName(); 
    private static final String SOAP_ACTION = "http://tempuri.org/GetSomething"; 
    private static final String METHOD_NAME = "GetSomething"; 
    private static final String NAMESPACE = "http://tempuri.org/"; 
    private static final String URL = "http://www.yoursite.com /Services/webservice.asmx"; 

調用服務:

private SoapObject CallWebService() { 
    try { 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      request.addProperty("lang", Language); 
      request.addProperty("restTitle", mSearchText);   
      request.addProperty("x", mLongitude); 
      request.addProperty("y", mLatitude); 


      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.implicitTypes = true; 
      envelope.dotNet = true; 
      envelope.encodingStyle = SoapSerializationEnvelope.XSD; 
      envelope.setOutputSoapObject(request); 

      MarshalDouble md = new MarshalDouble(); 
      md.register(envelope); 

      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      SoapObject result = (SoapObject) envelope.getResponse(); 

      SearchingMap.getInstance().Clear(); 
      return result; 
     } catch (Exception ex) { 
      Log.e(TAG, ex.getMessage()); 
     } 
     return null; 
} 

這僅僅是調用服務,而不分析它和東西。

JSON例如:

public class AsyncJsonDataTask extends AsyncTask<String, Integer, JSONArray> { 
    private JsonLoader _jsonHelper; 
    private IJsonDataListener _dataListener; 
    private ProgressDialog _dialog; 

    /*Progress bar widget initialize*/ 
    public AsyncJsonDataTask(IJsonDataListener dataListener, ProgressDialog dialog) { 
     _dataListener = dataListener; 
     _jsonHelper = new JsonLoader(); 
     _dialog = dialog; 
    } 

    @Override 
    protected JSONArray doInBackground(String... urls) { 
     JSONArray result = _jsonHelper.GetJSONArray(urls[0]); 
     return result; 
    } 

    @Override 
    protected void onPostExecute(JSONArray result) { 
     if (_dialog != null) { 
      if (_dialog.isShowing()) { 
       _dialog.dismiss(); 
      } 
     } 
     _dataListener.OnJsonDataLoadComplete(result); //gets data oncomplete 
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 
    } 

    @Override 
    protected void onPreExecute() { 
     if (_dialog != null) { 
      _dialog.setMessage("Load Data"); 
      _dialog.show(); 
     } 
    } 
} 

public class JsonHelper { 
    /* public static Object toJSON(Object object) throws JSONException { 
      if (object instanceof Map) { 
       JSONObject json = new JSONObject(); 
       Map map = (Map) object; 
       for (Object key : map.keySet()) { 
        json.put(key.toString(), toJSON(map.get(key))); 
       } 
       return json; 
      } else if (object instanceof Iterable) { 
       JSONArray json = new JSONArray(); 
       for (Object value : ((Iterable)object)) { 
        json.put(value); 
       } 
       return json; 
      } else { 
       return object; 
      } 
     } 

     public static boolean isEmptyObject(JSONObject object) { 
      return object.names() == null; 
     } 

     public static Map<String, Object> getMap(JSONObject object, String key) throws JSONException { 
      return toMap(object.getJSONObject(key)); 
     } 

     public static Map<String, Object> toMap(JSONObject object) throws JSONException { 
      Map<String, Object> map = new HashMap(); 
      Iterator keys = object.keys(); 
      while (keys.hasNext()) { 
       String key = (String) keys.next(); 
       map.put(key, fromJson(object.get(key))); 
      } 
      return map; 
     } 

     public static List toList(JSONArray array) throws JSONException { 
      List list = new ArrayList(); 
      for (int i = 0; i < array.length(); i++) { 
       list.add(fromJson(array.get(i))); 
      } 
      return list; 
     } 

     private static Object fromJson(Object json) throws JSONException { 
      if (json == JSONObject.NULL) { 
       return null; 
      } else if (json instanceof JSONObject) { 
       return toMap((JSONObject) json); 
      } else if (json instanceof JSONArray) { 
       return toList((JSONArray) json); 
      } else { 
       return json; 
      } 
     }*/ 
} 

我在整個項目一旦寫入這個沒有CONFIGS之類的東西,我保留SRP在這裏,你可以查看你所需要的,並使用它。

相關問題