извлечение информации из вызовов веб-службы - PullRequest
0 голосов
/ 16 мая 2010

Я пытаюсь получить информацию из вызова веб-службы. Вот что я имею до сих пор. В моем текстовом представлении это показывает

Map {item=anyType{key=TestKey; value=2;}; item=anyType{key=TestField; value=adsfasd; };}

Когда я запустил это в отладчике, я вижу информацию выше в переменной tempvar. Но вопрос в том, как мне получить информацию (то есть фактические значения «ключ» и «значение» в каждой позиции массива)? Да, я знаю, что в onCreate многое происходит, и я исправлю это позже.

Спасибо заранее, Monte

Мои коды следующие,

import java.util.Vector;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;


public class ViewHitUpActivity extends Activity {
private static final String SOAP_ACTION = "test_function";
private static final String METHOD_NAME = "test_function";
private static final String NAMESPACE = "http://www.monteandjanicechan.com/";
private static final String URL = "http://www.monteandjanicechan.com/ws/test_ws.cfc?wsdl";
// private Object resultRequestSOAP = null;
private TextView tv;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
tv = (TextView)findViewById(R.id.people_view);

//SoapObject
request.addProperty("test_item", "1");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);


AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
try
{
androidHttpTransport.call(SOAP_ACTION, envelope);
/*
resultRequestSOAP = envelope.getResponse();
Vector tempResult = (Vector) resultRequestSOAP("test_functionReturn");
*/
SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;

Vector tempResult = (Vector) resultsRequestSOAP.getProperty("test_functionReturn");

int testsize = tempResult.size();

// SoapObject test = (SoapObject) tempResult.get(0);

//String[] results = (String[]) resultRequestSOAP;

Object tempvar = tempResult.elementAt(1);

tv.setText(tempvar.toString());
}
catch (Exception aE)
{
aE.printStackTrace ();
tv.setText(aE.getClass().getName() + ": " + aE.getMessage());
}
}
} 

Ответы [ 2 ]

0 голосов
/ 17 мая 2010

Я действительно нашел альтернативный способ сделать это. Я реструктурировал свой веб-сервис, используя cfproperty для определения свойств внутри веб-сервиса. И затем в веб-сервисе я использую следующее для получения свойств,

SoapObject test = (SoapObject) tempResult.get (0);

       String temp_string = (String) test.getProperty("TestKey"); 
       temp_string = temp_string + " " + (String) test.getProperty("TestField");

Теперь все работает так, как должно.

0 голосов
/ 16 мая 2010

Вам следует взглянуть на документацию Ksoap2, чтобы полностью понять, что происходит. Тем не менее, я собираюсь предположить, что ваш Object tempvar может стать java.util.Map, который имеет методы для чтения ключей и извлечения значений для ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...