1

こんにちは、私はこのデータをオブジェクトに解析したいこのコードを持っています。現在、anyType の文字列を取得しています。

説明オブジェクトの緯度オブジェクトと経度オブジェクトを別々に取得したい

@SuppressLint("NewApi") 
public class MainActivity extends Activity {
private static final String SOAP_ACTION = "http://tempuri.org/xxxx/xxxx";
private static final String METHOD_NAME = "xxxxxx";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://10.0.2.2:52564/xxxx.svc/soap";    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy); 

    TextView textView = new TextView(this);

    setContentView(textView);

    SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE httpTransport = new HttpTransportSE(URL);

    try
    {
        httpTransport.call(SOAP_ACTION, envelope);  
        Object result = (Object)envelope.getResponse();
        textView.setText(result.toString());
    }
    catch (Exception exception)
    {
        textView.setText(exception.toString());
    }
}
}
4

3 に答える 3

0

json をオブジェクトに解析する最も簡単な方法は、オブジェクト マッパーを使用することです。

    ObjectMapper om = new ObjectMapper();
    YourClass object = om.readValue(jsonText, YourClass.class); 

このオブジェクト マッパーは jackson のものです。

http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/ObjectMapper.html

于 2014-05-06T08:33:29.160 に答える
0

json オブジェクトを使用して応答を処理できます。

コードの抜粋は次のとおりです。

JSONObject obj = new JSONObject(envelope.getResponse().toString());
String Latitude = obj.getString("Latitude");
String Longitude = obj.getString("Longitude");

それはあなたのjsonが次のようになっている場合です:

{
  Latitude: "1.00",
  Longitude: "1.00"
}

あなたのコメントによると、jsonは次のようになります。

[
  {
    "Description": "1",
    "Latitude": 0.369,
    "Longitude": 1.258
  },
  {
    "Description": "2",
    "Lati‌​tude": 1.369,
    "Longitude": 3.258
  },
  {
    "Description": "3",
    "Latitude": 2.369,
    "Longitude": 2.258
  }
]

次のように値を抽出できます。

JSONArray obj = new JSONArray(envelope.getResponse().toString());
String[][] values = new String[obj.length()][3];
for(int i = 0; i < obj.length(); i++)
{
    values[i][0] = obj.getJSONObject(i).getString("Description");
    values[i][1] = obj.getJSONObject(i).getString("Latitude");
    values[i][2] = obj.getJSONObject(i).getString("Longitude");
}

ここにエラーがある可能性があります。ここに簡単に書きました。
しかし、それはあなたが理解する必要がある概念です。

于 2014-05-06T08:37:35.563 に答える
0

あなたのjsonデータがあったように

[
    {
        "Description": "1",
        "Latitude": 0.369,
        "Longitude": 1.258
    },
    {
        "Description": "2",
        "Latitude": 1.369,
        "Longitude": 3.258
    },
    {
        "Description": "3",
        "Latitude": 2.369,
        "Longitude": 2.258
    }
]

次のようにデータのクラスを作成します

public class Detail {
    String description;
    Double lat;
    Double longi;

    public Detail(String description, Double lat, Double longi) {
        this.description=description;
        this.lat=lat;
        this.longi=longi;
    }
}

arraylistを次のように作成した後、Deatail

List<Detail> detailList=new ArrayList<Detail>();

そして、次のことを行います

String jsondata = loadJSONFromAsset();//load data and assign as json string
        JSONArray primaryArray;
        try {
            primaryArray = new JSONArray(jsondata);

            for (int i = 0; i < primaryArray.length(); i++) {

                JSONObject jObject = primaryArray.getJSONObject(i);
                String description = (String) jObject.getString("Description");
                Log.d("Description", description);
                Double latitude =  jObject.getDouble("Latitude");
                Log.d("Latitude", latitude+"");
                Double longitude = jObject.getDouble("Longitude");
                Log.d("Longitude", longitude+"");

                detailList.add(new Detail(description, latitude, longitude));
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

arraylist からすべての詳細データを取得できるようになりました

于 2014-05-06T09:15:48.850 に答える