2012-12-23 82 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在这里,你可以查看你所需要的,并使用它。

相关问题