[英]How to call PHP web service in Android application?
我正在開發一個Android應用程序,其中所有數據都通過PHP Web服務來。 現在,我對如何執行此操作感到困惑。 我應該使用PHP開發哪種Web服務(ksoap,soap,rest等),以便在Android中調用該Web服務時輕巧? 對於這種類型的應用程序,我需要做什么? 另外,目前我正在本地制作應用程序,因此PHP將從mysql數據庫獲取數據。 請建議我應該開發哪種Web服務。 如何在Android應用程序中稱呼它? 我也想知道我是否可以在Android本身中開發Web服務,因為我只有靜態數據要傳遞,可能需要輸入2或3個數據。
我不建議您使用SOAP來實現它,這並不方便。 我花了很多時間來解析來自SOAP服務的這些元素,建議您實現JSON
Web服務。
/*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;
}
}*/
}
我在整個項目中都寫過一次,沒有任何配置和內容,我在這里保留了SRP
,您可以檢查所需內容並使用它。
由於您需要的是小數據並且也是本地的,因此最好使用REST,因為它不需要像KSOAP或其他任何東西。如果有分布式環境,那么SOAP會更好。在您的情況下,我認為REST是好。
這是您可以檢查的鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.