0

私は、すべてのデータがPHPWebサービスを介して取得されるAndroidアプリケーションを開発しています。今、私はこれを行う方法に混乱しています。どのWebサービス(ksoap、soap、restなど)をPHPで開発して、AndroidでそのWebサービスを呼び出すときに軽量になるようにする必要がありますか?そして、このタイプのアプリケーションのために私がする必要があることは何ですか?また、現在私はローカルでアプリケーションを作成しているので、PHPはmysqlデータベースからデータを取得します。開発すべきWebサービスを提案してください。Androidアプリケーションでどのように呼び出すのですか?また、渡す静的データしかなく、入力に2つまたは3つのデータが必要になる可能性があるため、Android自体でWebサービスを開発できることも知りたいです。

4

2 に答える 2

1

SOAPを使用することはお勧めしません。実装するのは快適ではありません。SOAP サービスに由来するこれらの要素を解析するのに多くの時間を費やしました。Web サービスを実装することをお勧めしますJSON

    /*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。ここに保存しました。必要なものを確認して使用できます。

于 2012-12-23T07:31:37.960 に答える
0

小さなデータが必要で、それもローカルにあるため、KSOAPなどの追加のものは必要ないため、RESTを使用することをお勧めします。分散環境がある場合は、SOAPの方が優れています。あなたの場合、RESTは良い。

ここにあなたがチェックできるリンクがあります。

于 2012-12-23T06:39:33.237 に答える