程序就是从服务器webservice获取字符串
代码如下1.连接服务器
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
public class httpcon{ public ArrayList<String>GetWebServer(String methodName,ArrayList<String> Parameters,ArrayList<String> ParaValues){ //soap传输 ArrayList<String> Values =new ArrayList<String>(); String ServerUrl="192.168.1.3:10001"; String soapAction ="http://tempuri.org/" + methodName; String soap ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<soap:Body />"; String tps, vps, ts; String mreakString = ""; mreakString = "<" + methodName + " xmlns=\"http://tempuri.org/\">"; System.out.println("联网前"+methodName); for(int i =0; i < Parameters.size(); i++) { tps = Parameters.get(i).toString(); vps = ParaValues.get(i).toString(); ts="<" + tps + ">" + vps + "</" + tps + ">"; mreakString = mreakString +ts;} mreakString = mreakString + "</" + methodName + ">"; String soap2 = "</soap:Envelope>"; String requestData = soap + mreakString + soap2; //联网,数据交互 try{URL url = new URL(ServerUrl); HttpURLConnection con = (HttpURLConnection) url.openConnection(); byte[] bytes = requestData.getBytes("utf-8"); con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); con.setConnectTimeout(6000);// 设置超时时间 con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "text/xml;charset=utf-8"); con.setRequestProperty("SOAPAction", soapAction); con.setRequestProperty("Content-Length", ""+bytes.length); OutputStream outStream = con.getOutputStream(); outStream.write(bytes); outStream.flush(); outStream.close(); System.out.println("FFF"+methodName); System.out.println("FFF"+Parameters); InputStream inStream = con.getInputStream(); StringBuffer out = new StringBuffer(); String s1 = ""; //读取输出流 byte[] b = new byte[4096]; for (int n; (n = inStream.read(b)) != -1;) { s1 = new String(b, 0, n); out.append(s1);} System.out.println("FFFout"+out.toString()); System.out.println("FFFout"+s1.toString()); //字符串转化为流,便于用pll解析器解析 byte[] bytes1 = s1.getBytes() ; ByteArrayInputStream bais=new ByteArrayInputStream(s1.getBytes()); Values = jsonxml(bais, methodName); return Values; } catch (Exception e) { <span style="color: #FF0000;">System.out.print("2221");</span> return null;}} <span style="color: #993300;">public ArrayList<String> jsonxml(InputStream bais, String methodName) throws IOException</span> { // pull解析器解析所获数据流 ArrayList<String> Values = new ArrayList<String>(); Values.clear(); XmlPullParser pullParser=Xml.newPullParser(); try { pullParser.setInput(bais ,"UTF-8"); //格式 int eventCode=pullParser.getEventType();//读取文档的开始 while(eventCode!=XmlPullParser.END_DOCUMENT) { switch(eventCode){ case XmlPullParser.START_DOCUMENT:break; case XmlPullParser.START_TAG://判断是否为开始元素事件 if("string".equals(pullParser.getName())) { //判断开始元素是否为<string>,获取数据除soap固有格式外,都是<string>数据</string> Values.add(pullParser.nextText()); } ;break; case XmlPullParser.END_TAG:break; } eventCode= pullParser.next();//进入到下一个元素;' } } catch (XmlPullParserException e) { e.printStackTrace(); } return Values; }} |
2.逻辑实现:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public List<HashMap<String, String>> chakan(String Ztz) { List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); arrayList.clear(); brrayList.clear(); crrayList.clear() ; arrayList.add("Ztz"); brrayList.add(Ztz); crrayList = http.GetWebServer("gc", arrayList, brrayList); System.out.println("22222"+crrayList); HashMap<String, String> tempHash = new HashMap<String, String>(); if(crrayList!=null){ for(int j = 0; j < crrayList.size(); j+=1) { HashMap<String, String> hashMap = new HashMap<String, String>(); hashMap.put("biaoti", crrayList.get(j)); list.add(hashMap); }} System.out.println("111111"+list); System.out.println("chakan"+list); return list; } public List<HashMap<String, String>> ejym01(String Ztz) { List<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>(); arrayList.clear(); brrayList.clear(); crrayList.clear() ; arrayList.add("Ztz"); brrayList.add(Ztz); System.out.println("这是"+brrayList); crrayList = http.GetWebServer("ejymwt", arrayList, brrayList); System.out.println("crraylist"+crrayList); if(crrayList!=null){ for(int j = 0; j < crrayList.size(); j+=1) { HashMap<String, String> hashMap = new HashMap<String, String>(); hashMap.clear(); hashMap.put("biaoti", crrayList.get(j)); list.add(hashMap);}} else{System.out.println("物质");} System.out.println("list"+list); return list;} |
3.显示层
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
//这是一条查询// runable run1=new runable();Thread thread1 = new Thread(run1); thread1.start(); public class runable implements Runnable{ @Override public void run() { System.out.println("本地OK!!"); System.out.println("本地OK!! 当前线程"+Thread.currentThread().getName().toString()); dbutil_1=new dbUtil(); List<HashMap<String, String>> list1 = new ArrayList<HashMap<String, String>>(); list1.clear(); list1 = dbutil_1.ejym01("市长信箱"); System.out.println("0000000"+list1); adapter = new SimpleAdapter( ej01.this, list1, R.layout.lv02, new String[]{"biaoti"}, new int[]{R.id.stv00}); slv.post(new Runnable(){ public void run(){ slv.setAdapter(adapter); int totalHeight = 0; for (int i = 0; i < adapter.getCount(); i++) { View listItem = adapter.getView(i, null, slv); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = slv.getLayoutParams(); params.height = totalHeight + (slv.getDividerHeight() * (slv.getCount() - 1)); slv.setLayoutParams(params); System.out.println("本地测验"); }});} |
//其他是类似结构
//在2.2版本模拟器上运行时(连接服务器一层代码完全相同),数据完全正常显示
//在用jsonxml解析字符串前,用的另一种方式解析,结果是能获取数据,但是不稳定,在多条数据获取时往往显示不全; 换了jsonxml解析后,无法获取数据。断点捕获数据交互层异常,输出2221。
//也输出Skipped 182 frames! The application may be doing too much work on its main thread. 但我分线程了啊,断点输出当前线程名字也不是主线程,难道非得用handler,post(runable)也不行?
//请教大神们,这到底是怎么回事儿?哪的问题啊?
//
太长了