2012-02-22 17 views
2

私は以下のコードでWebサービスに投稿するAndroidアプリを持っています。しかし、サービスのmyContractメソッドはブール値trueまたはfalseを返します。その値を取得するにはどうすればよいですか?WCFからの戻り値の取得Android

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をログに記録するか、乾杯、私は理解していない文字列を返します!

更新

おかげShereef、

しかし、それは私がやろうとして何をするために少しあまりにも多くの情報とコードのように思えます。その下にいくつかのコードを追加しましたが、それが正しいかどうかはわかりません。このサービスは、POSTが成功したかどうかに関して、trueまたはfalseのブール値を返しますが、文字列として取得しているようです。

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); 

これは問題ありませんか?それは動作しますが、私はその権利があるかどうかは分かりません! 乾杯、 マイク。

+0

Webサービスは、すべてのプログラミング言語と通信することができるように設計されているこの回答を参照することができます(.NET )あなたは常に文字列として読み込み、必要なターゲット形式に解析します。つまり、C#でWebサービス参照を追加することができ、必要な形式でデータを取得できますが、wsdlを解析するライブラリを取得しない限りwcf文字列を実際の出力に解析すると、解析するまでは常に文字列になります –

答えて

3
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

+0

私は自分の答えを書式化しました。 –

関連する問題