关于android中接受webservice转化json对象的问题~

灰火 2012-07-30 08:53:41
小弟第一次用接触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 {
// httpTran.call("http://192.168.16.223:8080/sayHello",envelope);
httpTran.call(null, envelope);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 使用getResponse方法获得WebService方法的返回结果


// 使用bodyin方法获得返回结果
// SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject result;
try {
result = (SoapObject) envelope.getResponse();

JSONObject obj = new JSONObject();
obj.quote(result.toString());
System.out.println("result = " + result.toString());
System.out.println("obj = " + obj);
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//

}
}

求大侠帮忙~~
...全文
1157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CHINGHE 2014-07-25
  • 打赏
  • 举报
回复
我用envelope.bodyIn接收对象回来的时候,怎么在后台显示不完所有数据的。求解决
nbaqqqq 2012-11-13
  • 打赏
  • 举报
回复
报错Names must be strings, but {"b":"bb","Staff_Name":"admin","Staff_Password":"123123","a":"aa"} is of type org.json.JSONObject at character 59 of {{Staff_Name:"admin",Staff_Password:"123123",a:"aa",b:"bb"}{a:"aa",b:"bb"}}
nbaqqqq 2012-11-13
  • 打赏
  • 举报
回复
LS的代码不行啊
灰火 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

调用getProperty()里面的参数怎么写?
[/Quote]

我是JSONObject obj = new JSONObject(result.getProperty(0).toString());
limge 2012-07-31
  • 打赏
  • 举报
回复
调用getProperty()里面的参数怎么写?
灰火 2012-07-30
  • 打赏
  • 举报
回复
谢了,我了了,前面要先调用下getProperty(),然后再用你那句~~谢啦~
灰火 2012-07-30
  • 打赏
  • 举报
回复
呃。。。
result.toString()是这样的~~

testResponse{return={"id":"name","id02","name02",~~~~};}

booooo­ 2012-07-30
  • 打赏
  • 举报
回复
你的result.toString()这句话的结果是什么样的?

是标准的JSON字符串么,像这样:
{
"user": {
"id": 1404376560,
"screen_name": "zaku",
"name": "zaku"
}
}

如果是这样的,那么你就可以直接将该字符串装进JSONObject对象中,像这样:

JSONObject jsonObject = new JSONObject(result.toString());
这样就成了,一个JSON对象就出来了。
之后就根据每个键取出每个值就OK了

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧