ksoap webservice を使用してデータにアクセスし、中かっこなしでデータのみが存在する場合に結果を取得しています。しかし、Web サービスでは、中かっこ{}内でデータを使用できます。その場合、データにアクセスできず、null データしか取得できません。次のようになります。
{"メッセージ":"ローンの種類を処理する必要があります。"}
これは ksoap Web サービスの出力でした。中かっこ内の値にアクセスするにはどうすればよいですか。誰か助けてください。
ksoap webservice を使用してデータにアクセスし、中かっこなしでデータのみが存在する場合に結果を取得しています。しかし、Web サービスでは、中かっこ{}内でデータを使用できます。その場合、データにアクセスできず、null データしか取得できません。次のようになります。
{"メッセージ":"ローンの種類を処理する必要があります。"}
これは ksoap Web サービスの出力でした。中かっこ内の値にアクセスするにはどうすればよいですか。誰か助けてください。
わかりました..あなたのWebサービスはResponceでJSONデータを返すので、コードでJsonデータを解析できます.JSON Webサービスを解析する方法についていくつかの基本的なロジックを提供しました.
//================================================
private ArrayList<HashMap<String, String>> MyArray = new ArrayList<HashMap<String,String>>();
private HashMap<String, String> MyTempHas;
private JSONObject JSONObj;
Private SoapObject responce = (SoapObject) envelope.getResponse();
/* gets our result in JSON String */
private String ResultObject = responce.getProperty(0).toString();
if (ResultObject.startsWith("{")) { // if JSON string is an object
JSONObj = new JSONObject(ResultObject);
Iterator<String> itr = JSONObj.keys();
MyTempHas = new HashMap<String, String>();
while (itr.hasNext()) {
String Key = (String) itr.next();
String Value = JSONObj.getString(Key);
MyTempHas.put(Key, Value);
// System.out.println(bundleResult.getString(Key));
}
MyArray.add(MyTempHas);
} else if (ResultObject.startsWith("[")) { // if JSON string is an array
JSONArr = new JSONArray(ResultObject);
System.out.println("length" + JSONArr.length());
for (int i = 0; i < JSONArr.length(); i++) {
JSONObj = (JSONObject) JSONArr.get(i);
Iterator<String> itr = JSONObj.keys();
MyTempHas = new HashMap<String, String>();
while (itr.hasNext()) {
String Key = (String) itr.next();
String Value = JSONObj.getString(Key);
MyTempHas.put(Key, Value);
// System.out.println(bundleResult.getString(Key));
}
MyArray.add(MyTempHas);
}
}
//========================================
この例では、1 つのオブジェクトのみを返す場合、"{" で始まり、すべての属性を Hasmap に保存してから、ArrayList に追加します。応答が複数のオブジェクトを送信する場合は、「[」配列で始まり、上記のロジックに従ってオブジェクトを 1 つずつ解析します。
次に、ArrayListに格納されているHasmapからすべての値を簡単に取得します。ArrayList から値を取得できない場合は、教えてください。
これがお役に立てば幸いです。
Ok..
SoapObject response = (SoapObject)envelope.getResponse();
String rate = response.getProperty(0).toString();
String pi = response.getProperty(1).toString();
String apr = response.getProperty(2).toString();
txtbox.setText = rate + " " + pi + " " + apr;
このサンプルコードを試してみてください :: 役に立つかもしれません ::
public class Mywebservice1Activity extends Activity implements OnClickListener {
EditText edtuname, edtpwd;
Button btnok, btncancel;
private static final String namespace = "http://tempuri.org/";
private static final String address = "http://192.168.1.138/test/Service.asmx";
private static final String method = "login1";
private static final String action = namespace + method;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edtuname = (EditText) findViewById(R.id.edtname);
edtpwd = (EditText) findViewById(R.id.edtpwd);
btnok = (Button) findViewById(R.id.btnok);
btncancel = (Button) findViewById(R.id.btncancel);
btnok.setOnClickListener(this);
btncancel.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == btnok) {
String name = edtuname.getText().toString();
String pass = edtpwd.getText().toString();
SoapObject request = new SoapObject(namespace, method);
SoapSerializationEnvelope envelop = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
request.addProperty("user", name.toString().trim());
request.addProperty("pass", pass.toString().trim());
envelop.setOutputSoapObject(request);
envelop.dotNet = true;
HttpTransportSE transport = new HttpTransportSE(address);
try {
transport.call(action, envelop);
Object res = envelop.getResponse();
Toast.makeText(this, res.toString(), Toast.LENGTH_SHORT).show();
// txt.setText(res.toString());
} catch (Exception e) {
// txt.setText(e.toString());
}
}
}
}