小弟第一次用接触webservice和json,现在有这么一个问题~,不知道这么处理对不对,webservice中,我是读取了数据库中的内容然后包装成json对象,然后返回到android中,不过android中调用接收的是soapobject对象,那我怎么把它变成JSON对象呢~
代码如下:
服务器端:
package com.snake.list;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONObject;
public class testList {
public JSONObject test(String response){
List<String> list = new ArrayList<String>();
JSONObject obj = new JSONObject();
Connection conn;
String user = "sa";
String pass = "123456";
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
System.out.println("驱动成功");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("类未找到错误");
}
try {
conn = DriverManager
.getConnection(
"jdbc:microsoft:sqlserver://192.168.16.223:1433;DatabaseName=" + response,
user, pass);
System.out.println("连接成功");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT TOP 10 * FROM recipe ORDER BY NEWID()");
while (rs.next()) {
obj.put(rs.getString("id"), rs.getString("name"));
}
System.out.println(obj);
System.out.println("读取完毕");
rs.close();
stmt.close();
conn.close();
System.out.println("OK,连接成功");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("SQL错误");
}
return obj;
}
}
客户端:
package snake.android.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.transport.HttpsTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class TestActivity extends Activity {
/** Called when the activity is first created. */
private TextView test = null;
private SoapObject soapObject;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
test = (TextView) findViewById(R.id.test_textview);
// 指定webService命名空间和调用的方法,可以从WSDL的文档中找到
SoapObject request = new SoapObject("http://list.snake.com/", "test");
// 设置调用方法的参数值,第一个参数是键值对的键,第二个是键值对的值
request.addProperty("arg0", "caiguan");
// 生成调用WebService方法的soap请求信息,该信息由SoapSerializationEnvelop对象描述
/**
* 1.创建SoapSerializationEnvelope对象时,需要用它的构造方法设置SOAP协议的版本号,
* 该版本号需要根据WebService端的版本号设置。
* 2.创建好SoapSerializationEnvelope后,要设置它的bodyOut属性
* ,属性的值,就是前面创造的SoapObject对象
*/
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = false;
// 创建HttpTransportsSE对象,通过这个对象的构造方法,可以指定WebService的WSDL文档中的URL
HttpTransportSE httpTran = new HttpTransportSE(
"http://192.168.16.223:8080/TestListWebService/testListPort?wsdl");
httpTran.debug = true;
// 使用Call方法调用WebService方法。
try {