如何在Android应用程序中调用PHP web服务?

如何在Android应用程序中调用PHP web服务?,php,android,web-services,Php,Android,Web Services,我正在开发一个Android应用程序,其中所有数据都通过PHP web服务提供。现在我不知道该怎么做。我应该用PHP开发哪个web服务(ksoap、soap、rest等),以便在Android中调用该web服务时,它是轻量级的?对于这种类型的应用程序,我需要做什么?目前我还在本地制作应用程序,所以PHP将从mysql数据库获取数据。请建议我应该开发哪个web服务。在Android应用程序中如何称呼它?我还想知道,我是否可以在Android中开发web服务,因为我只有静态数据要传递,可能需要输入2

我正在开发一个Android应用程序,其中所有数据都通过PHP web服务提供。现在我不知道该怎么做。我应该用PHP开发哪个web服务(ksoap、soap、rest等),以便在Android中调用该web服务时,它是轻量级的?对于这种类型的应用程序,我需要做什么?目前我还在本地制作应用程序,所以PHP将从mysql数据库获取数据。请建议我应该开发哪个web服务。在Android应用程序中如何称呼它?我还想知道,我是否可以在Android中开发web服务,因为我只有静态数据要传递,可能需要输入2或3个数据。

因为您需要小数据,而且也是本地数据,所以最好使用REST,因为它不需要任何额外的东西,如KSOAP或其他任何东西。如果有分布式环境,那么SOAP更好。在您的情况下,我认为REST是好的


是一个您可以检查的链接。

我不建议您使用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;
            }
        }*/
}
公共类AsyncJsonDataTask扩展了AsyncTask{
私有JsonLoader\u jsonHelper;
私有IJsonDataListener\u dataListener;
私有进程对话框;
/*进度条小部件初始化*/
公共异步JsonDataTask(IJsonDataListener dataListener,ProgressDialog对话框){
_dataListener=dataListener;
_jsonHelper=新的JsonLoader();
_对话=对话;
}
@凌驾
受保护的JSONArray doInBackground(字符串…URL){
JSONArray结果=_jsonHelper.GetJSONArray(URL[0]);
返回结果;
}
@凌驾
受保护的void onPostExecute(JSONArray结果){
如果(_dialog!=null){
如果(_dialog.isShowing()){
_dialog.dismise();
}
}
_dataListener.OnJsonDataLoadComplete(result);//获取完成时的数据
}
@凌驾
受保护的void onProgressUpdate(整数…进度){
}
@凌驾
受保护的void onPreExecute(){
如果(_dialog!=null){
_setMessage(“加载数据”);
_dialog.show();
}
}
}
公共类JsonHelper{
/*公共静态对象toJSON(对象对象)抛出JSONException{
if(映射的对象实例){
JSONObject json=新的JSONObject();
Map=(Map)对象;
for(对象键:map.keySet()){
put(key.toString(),toJSON(map.get(key));
}
返回json;
}else if(Iterable的对象实例){
JSONArray json=新的JSONArray();
对于(对象值:((Iterable)对象)){
json.put(值);
}
返回json;
}否则{
返回对象;
}
}
公共静态布尔isEmptyObject(JSONObject对象){
返回object.names()==null;
}
公共静态映射getMap(JSONObject对象,字符串键)抛出JSONException{
返回toMap(object.getJSONObject(key));
}
公共静态映射toMap(JSONObject对象)抛出JSONException{
Map Map=newhashmap();
迭代器键=object.keys();
while(keys.hasNext()){
字符串键=(字符串)键。下一步();
map.put(key,fromJson(object.get(key));
}
返回图;
}
公共静态列表toList(JSONArray数组)抛出JSONException{
列表=新的ArrayList();
对于(int i=0;i

我在整个项目中写过一次,没有配置之类的东西,我在这里保留了
SRP
,您可以检查您需要什么并使用它。

REST可以从数据库中获取数据吗?我的意思是我没有使用在线网站数据。我只使用笔记本电脑中的本地数据。@Dhwani您有webservice,它将返回从数据库获取的数据,因此您必须在webservice中实现。您可以在我提供的链接中看到这一点。您必须在您的android项目中获取数据,并使用json解析技术或xmlparsing技术对其进行解析。好的,谢谢。我浏览了你的网站。它帮助了我。但我有一点疑问,那就是它是基本的web服务,但属于什么类型(REST/SOAP)?非常感谢。这对我帮助很大。