困扰几周了,请教啊,android与websevice数据交互很诡异的问题

============问题描述============

传输数据(title,imgurl,account)当传输title或title+account时数据正常传输,但是无法传输Imgurl项,即使imgurl+title都一样,没有任何数据显示

请教

1.httpcon.java复制内容到剪贴板代码:

//数据交互,输入输出流与读取流

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;

public class httpcon{

public ArrayList<String>GetWebServer(String methodName,ArrayList<String> Parameters,ArrayList<String> ParaValues){

ArrayList<String> Values =new ArrayList<String>();

//soap格式

String ServerUrl="http://10.0.2.2:58665/Service1.asmx";

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/\">";

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;

//连接webservice,数据交互

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();

InputStream inStream = con.getInputStream();

//读取流类调用

Values = inputStreamtovaluelist(inStream, methodName);

return Values;

} catch (Exception e) {

System.out.print("2221");

System.out.print("2221");

return null;}}

//读取流

public ArrayList<String> inputStreamtovaluelist(InputStream in, String methodName) throws IOException {

StringBuffer out = new StringBuffer();

String s1 = "";

byte[] b = new byte[4096];

ArrayList<String> Values = new ArrayList<String>();

Values.clear();

for (int n; (n = in.read(b)) != -1;) {

s1 = new String(b, 0, n);

out.append(s1);

}

System.out.println(out);

String[] s13 = s1.split("><");

String ifString = methodName + "Result";

String TS = "";

String vs = "";

Boolean getValueBoolean = false;

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

TS = s13;

System.out.println(TS);

int j, k, l;

j = TS.indexOf(ifString);

k = TS.lastIndexOf(ifString);

if (j >= 0) {

System.out.println(j);

if (getValueBoolean == false) {

getValueBoolean = true;

} else {

}

if ((j >= 0) && (k > j)) {

System.out.println("FFF" + TS.lastIndexOf("/" + ifString));

//System.out.println(TS);

l = ifString.length() + 1;

vs = TS.substring(j + l, k - 2);

//System.out.println("fff"+vs);

Values.add(vs);

System.out.println("退出" + vs);

getValueBoolean = false;

System.out.println("一");

return Values;

}

}

if (TS.lastIndexOf("/" + ifString) >= 0) {

getValueBoolean = false;

return Values;

}

if ((getValueBoolean) && (TS.lastIndexOf("/" + ifString) < 0) && (j < 0)) {

k = TS.length();

//System.out.println(TS);

vs = TS.substring(7, k - 8);

//System.out.println("f"+vs);

Values.add(vs);

} }

System.out.println("二");

return Values;

}}

2.dbUtil.java复制内容到剪贴板代码:

//算是逻辑层吧

import java.sql.Connection;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

public class dbUtil {

private ArrayList<String> arrayList = new ArrayList<String>();

private ArrayList<String> brrayList = new ArrayList<String>();

private ArrayList<String> crrayList = new ArrayList<String>();

//private ArrayList<String> drrayList = new ArrayList<String>();

private httpcon http = new httpcon();

/*只粘贴有用的两个调用*/

//ej.java调用

public List<HashMap<String, String>> ejym(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("ejym", arrayList, brrayList);// soap格式

方法名,参数名,参数值

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));

// hashMap.put("url", crrayList.get(j+1));

list.add(hashMap);

}}

else{System.out.println("物质");}

System.out.println("list"+list);

return list;}

//mainactivity.java调用,传参为imgurl

public String[] tpxw() {

List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

arrayList.clear();

brrayList.clear();

crrayList.clear();

crrayList = http.GetWebServer("tpxw", arrayList, brrayList);//soap格式

println("图片新闻"+crrayList);

String[] a=new String[5];

if(crrayList!=null){

for(int j = 0; j < crrayList.size(); j++) {

a[j]="http://10.0.2.2:56041/Web"+crrayList.get(j);//补足路径,imgurl存储的为相对路径

return a;}

}

3.mainactivity.java主要代码

复制内容到剪贴板代码:

//显示网络图片,从dbutil.ava获取imgurl路径

Gallery gallery=(Gallery)findViewById(R.id.gallery);

try {

//设置Gallery的Adapter

gallery.setAdapter(new galleryadapter(this));

gallery.setSelection(0);//设置第一个图标居中

gallery.setSpacing(00);//图标之间的距离

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();}

public class galleryadapter extends BaseAdapter {

private String[] myImageURL = dbUtil_1.tpxw();//imgurl传输正常

//gallery格式

public galleryadapter(Context c){

mContext=c;

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return myImageURL.length;

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

} @Override

public View getView(int position, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

ImageView imageView = new ImageView(this.mContext);

try{

URL aryURI = new URL(myImageURL[position]);

// 打开连接

URLConnection conn = aryURI.openConnection();

conn.connect();

// 转变为 InputStream

InputStream is = conn.getInputStream();

// 将InputStream转变为Bitmap

Bitmap bm = BitmapFactory.decodeStream(is);

// 关闭InputStream

is.close();

//添加图片

imageView.setImageBitmap(bm);

} catch (IOException e)

{

e.printStackTrace();

}

//设置布局参数

imageView.setLayoutParams(new Gallery.LayoutParams(350, 300));

return imageView;

}}

4.ej.java复制内容到剪贴板代码:

//调用dbutil.ava,用listview显示所得Imgurl数据

import java.io.IOException;

import java.io.InputStream;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.lang.String.*;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.ScrollView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.AdapterView.OnItemClickListener;

import android.content.Intent;

public class ej extends Activity {

private TextView stvtitle;

private ListView slv;

private dbUtil dbutil_1;

private SimpleAdapter adapter;

private List<HashMap<String, String>> list;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.ejym);

//intent传参,在此未粘出代码,但是传参肯定没问题

String yh = null;

final String ej1 = it.getStringExtra(yh);

stvtitle=(TextView)findViewById(R.id.stvtitle);

slv=(ListView)findViewById(R.id.slv);

stvtitle.setText(ej1);

List<HashMap<String, String>> list1 = new ArrayList<HashMap<String, String>>();

list1.clear();

try{

dbutil_1=new dbUtil();//类的实例化

list1=dbutil_1.ejym(ej1);

System.out.println("0000000"+list1);

adapter = new SimpleAdapter(//adapter填充数据,但是到这儿数据已经为空

list,

R.layout.lv02,

new String[]{"biaoti"},

new int[]{R.id.stv00});

slv.setAdapter(adapter);

int totalHeight = 0;

//获取listview项目总数

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); }

catch(Exception e)

{

System.out.println("list1异常");

}}}//在mainactivity中传输正常,在ej.java中数据不显示,根据System.out.println()提示数据在httpcon.java中中断.在httpcon中初始有数据,到最后输出时数据变为空??但是同样的Imgurl数据在mainactivity.java中正常显示,而换了其他数据在ej.java显示也没问题??求教啊!!

//传输数据:Imgurl

/upload/comm/2010-05-26/eb6f19d7-34aa-495c-ba4a-7590297406ba.jpg

/upload/comm/2010-05-27/0e127bc1-84c9-40b6-9ef2-286672fdf51f.jpg

/upload/comm/2010-05-27/89927184-4c43-408a-90ad-ffdf4afaef65.jpg

/upload/comm/2010-05-27/d3030916-ff43-464c-97a3-71e5398af221.jpg

/upload/comm/2010-05-27/f3feee03-a12c-43f1-9eed-02a09a006521.jpg

/upload/comm/2010-05-27/e32ba156-c43c-4348-b2ca-0ad0318b5878.jpg

============解决方案1============

不敢当,只不过是我这几天刚好也遇到了这个问题,你按照我3楼和7楼所写的修改,程序就能跑起来了。我的已经能正确运行了。

时间: 2024-11-13 03:16:57

困扰几周了,请教啊,android与websevice数据交互很诡异的问题的相关文章

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

此文出自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据, 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客

关于android中gridview数据量很大的时候,在加载gridview时会出现卡顿的现象

好的解决办法就是先加载一定数量的数据,然后在最下方提示正在加载! 动态加载就是把放入adapter中的数据分好几次加载.在用户拖动gridview时再加载一定的数据,和sina微博的客户端类似. 给gridview添加OnScrollListener监听事件默认会覆盖下面两个方法: 下面列举个列子: <com.ui.widget.LazyGridView xmlns:android="http://schemas.android.com/apk/res/android" andr

Android与服务器端数据交互(http协议整合struts2+android)

在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 一:基于Http协议获取数据方法.二:基于SAOP协议获取数据方法,三:忘了------- 那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据. 那么,接下来我们便开始这一路程: 首先:编写服务器端

Android与服务器端数据交互(转)

上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端

Android HttpServlet Json 数据交互

Android 对其访问进行封装 Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务.Callable和Runnable有几点不同: (1)Callable规定的方法是call(),而Runnable规定的方法是run(). (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的. (3)call()方法可抛出异常,而run()方法是不能抛出异常的. (4)运行Callable任务可拿到一个

Android与后台数据交互学习

摘要 任何系统在没有用户登录就可操作数据是非常危险的,链接客户端与服务器的是用户登录后的session,用户登录系 统后存在一个sessionid,这个sessionid就是客户端的cookie,客户端获取到sessionid设置cookie后就可以发起任意的 HTTP服务器请求了. HTTP 客户端编程中最常碰见的问题,很多网站的内容都只是对注册用户可见的,这种情况下就必须要求使用正确的用户名和口令登录成功后,方可浏览到想要的页面.因 为HTTP协议是无状态的,也就是连接的有效期只限于当前请求

Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行

背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流... 为实现移动接口的调用保证工作流的正常webproject特别给提供了该虚拟浏览器的方案 原理:通过该方案实现虚拟浏览器后台运行jsp脚本,以达到我们要求 要求: 1.session保持.不然总会跳转到login界面 2.jsp脚本必须被运行,不能仅仅是单纯的发起一个请求 先上 private String submitHandler(HttpServletRequest request,String msg,String se

Android ViewPager 重复数据问题的解决方法

最近在做的新闻客户端用到了ViewPager,Android Studio如今集成的很好了,自动创建很多不必要写的代码. 在使用过程中碰到了一个很奇怪的事:ViewPager中加载的数据重复 具体的看图就明白了:   可以看到加载出来的数据,1.2页面出现了重复,而3恢复正常 在困扰许久之后博主在stackoverflow上面找到了大神的解答: Because you ware using static variable to show in fragments.When your say st

浅谈混合开发与Android,JS数据交互

本文是作者原创,如转载请注明出处! 一.概论 现在时代已经走过了移动互联网的超级火爆阶段,市场上移动开发人员已经趋于饱和,显然,只会原生APP的开发已不能满足市场的需求,随着H5的兴起与火爆,H5在原生APP中的使用越来越广泛,也就是我们常说的混合开发(Hybrid APP).最新很火的微信小程序相信大家都是知道的,实际上微信小程序加载的界面就是一个HTML5的界面,HTML5界面在一些电商类的APP中主要承担展示数据的作用,但是他的作用并不仅限于此,最起码js调用原生方法和原生调用js的方法是