• 困扰几周了,请教啊,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楼所写的修改,程序就能跑起来了。我的已经能正确运行了。
  • 相关阅读:
    django 登入,注册,密码重置
    Django 通过 admin 操作 MySQL数据库 ,审核功能加储存记录
    Python Django 循环插入到 MongoDB数据库中
    运行Django找不到Windows“http://127.0.0.1:8000/”的问题
    大数据 ----- Linux(基础命令)
    大数据 ----- 虚拟机与SXhell6 的链接
    大数据 ----- 在Xshell6 安装Hadoop与JDK以及环境变量
    java day14第十四课 IO(输入、输出)流和JAVA目录操作(重中之重)
    13弹;集合中的工具类Collections和Arrays
    第3弹;流程控制
  • 原文地址:https://www.cnblogs.com/lianxu61/p/4091448.html
Copyright © 2020-2023  润新知