Android извлекает возвращаемое значение из WCF

У меня есть приложение для Android, которое отправляет сообщения в веб-службу с помощью приведенного ниже кода, и все работает нормально. Но метод myContract в службе возвращает логическое значение, истинное или ложное. Как мне получить это значение, чтобы я мог указать моему приложению двигаться дальше или нет, если оно ложно?

HttpPost request = new HttpPost(SERVICE_URI + "/myContract/someString");

request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);

Изменить

Извините за редактирование, но использование HttpResponse, а затем регистрация или всплывающее уведомление response.toString() возвращает строку, которую я не понимаю!

Обновить

Спасибо, Шериф,

Но это кажется слишком большим количеством информации и кода, чтобы сделать то, что я пытался сделать. Ниже я добавил код, который работает, но я не уверен, что он правильный. Служба вернет логическое значение true или false относительно того, был ли POST успешным, но я, кажется, получаю его как строку!

HttpEntity responseEntity = response.getEntity();

char[] buffer = new char[(int)responseEntity.getContentLength()];
InputStream stream = responseEntity.getContent();       
InputStreamReader reader = new InputStreamReader(stream);
reader.read(buffer);
stream.close();

JSONObject jsonResponse = new JSONObject(new String(buffer));        
String ServiceResponse = jsonResponse.getString("putCommuniqueResult");

Log.d("WebInvoke", "Saving : " + ServiceResponse);

Это нормально? Это работает, но я не уверен, что это правильно! Привет, Майк.


person Community    schedule 22.02.2012    source источник
comment
Веб-службы предназначены для взаимодействия со всеми языками программирования, если вы не используете ту же технологию чтения (.NET), вы всегда будете читать как строку и анализировать ее в нужном вам целевом формате, т. е. C# может добавить ссылку на веб-службу и вы получите данные в нужном вам формате, но на любом другом языке, если вы не получите библиотеку, которая анализирует wsdl, а затем анализирует строку wcf в реальный вывод, она всегда будет строкой, пока вы ее не проанализируете   -  person Shereef Marzouk    schedule 26.02.2012


Ответы (1)


private static String getDataFromXML(final String text) {
    final String temp = new String(text).split("<")[2].split(">")[1];
    final String temp2 = temp.replace("&lt;", "<").replace("&gt;", ">")
            .replace("&amp;", "&");
    return temp2;
}

/**
 * Connects to the web service and returns the pure string returned, NOTE:
 * if the generated url is more than 1024 it automatically delegates to
 * connectPOST
 * 
 * @param hostName
 *            : the host name ex: google.com or IP ex:
 *            127.0.0.1
 * @param webService
 *            : web service name ex: TestWS
 * @param classOrEndPoint
 *            : file or end point ex: CTest
 * @param method
 *            : method being called ex: TestMethod
 * @param parameters
 *            : Array of {String Key, String Value} ex: { { "Username",
 *            "admin" }, { "Password", "313233" } }
 * @return the trimmed String received from the web service
 * 
 * @author Shereef Marzouk - http://shereef.net
 * 
 * 
 */
public static String connectGET(final String hostNameOrIP,
        final String webService, final String classOrEndPoint,
        final String method, final String[][] parameters) {
    String url = "http://" + hostNameOrIP + "/" + webService + "/"
            + classOrEndPoint + "/" + method;
    String params = "";
    if (null != parameters) {
        for (final String[] strings : parameters) {
            if (strings.length == 2) {
                if (params.length() != 0) {
                    params += "&";
                }
                params += strings[0] + "=" + strings[1];
            } else {
                Log.e(Standards.TAG,
                        "The array 'parameters' has the wrong dimensions("
                                + strings.length + ") in " + method + "("
                                + parameters.toString() + ")");
            }
        }
    }
    url += "?" + params;
    if (url.length() >= 1024) { // The URL will be truncated if it is more
                                // than 1024
        return Communications.connectPOST(hostNameOrIP, webService,
                classOrEndPoint, method, parameters);
    }
    final StringBuffer text = new StringBuffer();
    HttpURLConnection conn = null;
    InputStreamReader in = null;
    BufferedReader buff = null;
    try {
        final URL page = new URL(url);
        conn = (HttpURLConnection) page.openConnection();
        conn.connect();
        in = new InputStreamReader((InputStream) conn.getContent());
        buff = new BufferedReader(in);
        String line;
        while (null != (line = buff.readLine()) && !"null".equals(line)) {
            text.append(line + "\n");
        }
    } catch (final Exception e) {
        Log.e(Standards.TAG,
                "Exception while getting " + method + " from " + webService
                        + "/" + classOrEndPoint + " with parameters: "
                        + params + ", exception: " + e.toString()
                        + ", cause: " + e.getCause() + ", message: "
                        + e.getMessage());
        Standards.stackTracePrint(e.getStackTrace(), method);
        return null;
    } finally {
        if (null != buff) {
            try {
                buff.close();
            } catch (final IOException e1) {
            }
            buff = null;
        }
        if (null != in) {
            try {
                in.close();
            } catch (final IOException e1) {
            }
            in = null;
        }
        if (null != conn) {
            conn.disconnect();
            conn = null;
        }
    }

    if (text.length() > 0 && Communications.checkText(text.toString())) {
        final String temp = Communications.getDataFromXML(text.toString());
        Log.i(Standards.TAG, "Success in " + method + "(" + params
                + ") = " + temp);
        return temp;
    }
    Log.w(Standards.TAG, "Warning: " + method + "(" + params + "), text = "
            + text.toString());
    return null;
}

скажем, этот URL-адрес показывает, что ваш сервис показывает результат

http://google.com/wcfsvc/service.svc/showuserdata/11949

public boolean isWSTrue() {
    String data = connectGET("google.com",
            "wcfsvc", "service.svc",
            "showuserdata/11949", null);
    if(null != data && data.length() >0)
        return data.toLowerCase().contains("true");
    throw new Exception("failed to get webservice data");
}

Примечание: в этом случае вам на самом деле не нужно анализировать JSON или XML, если вы только проверяете логическое значение, тогда вы знаете, нашли ли вы истину, это правда, если нашли что-то еще, это ложь.

если вам нужно получить данные с помощью XML или JSON, вы можете обратиться к этому ответу https://stackoverflow.com/a/3812146/435706< /а>

person Shereef Marzouk    schedule 22.02.2012