<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    關于安卓通過webservice訪問數據庫問題

     ============問題描述============
      訪問數據庫時,手機能增刪數據庫的數據就是顯示不了數據庫的里的數據不知道是哪里的問題,用的HTTP
      這是我webservice中的產看所有信息的方法:
    public List<string> selectAllCargoInfor()
    {
    List<string> list = new List<string>();
    try
    {
    string sql = "select * from C";
    SqlCommand cmd = new SqlCommand(sql,sqlCon);
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
    //將結果集信息添加到返回向量中
    list.Add(reader[0].ToString());
    list.Add(reader[1].ToString());
    list.Add(reader[2].ToString());
    }
    reader.Close();
    cmd.Dispose();
    }
    catch(Exception)
    {
    }
    return list;
    }
      接下來是安卓端的:
      這個是MainActivity中的設置LISTVIEW的方法
    private void setListView() {
    listView.setVisibility(View.VISIBLE);
    List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    list = dbUtil.getAllInfo();
    adapter = new SimpleAdapter(MainActivity.this, list, R.layout.adapter_item,
    new String[] { "Cno", "Cname", "Cnum" },
    new int[] { R.id.txt_Cno, R.id.txt_Cname, R.id.txt_Cnum });
    listView.setAdapter(adapter);
    }
      這個是操作類:
    public List<HashMap<String, String>> getAllInfo() {
    List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    arrayList.clear();
    brrayList.clear();
    crrayList.clear();
    new Thread(new Runnable() {
    @Override
    public void run() {
    // TODO Auto-generated method stub
    crrayList = Soap.GetWebServre("selectAllCargoInfor", arrayList, brrayList);
    }
    }).start();
    HashMap<String, String> tempHash = new HashMap<String, String>();
    tempHash.put("Cno", "Cno");
    tempHash.put("Cname", "Cname");
    tempHash.put("Cnum", "Cnum");
    list.add(tempHash);
    for (int j = 0; j < crrayList.size(); j += 3) {
    HashMap<String, String> hashMap = new HashMap<String, String>();
    hashMap.put("Cno", crrayList.get(j));
    hashMap.put("Cname", crrayList.get(j + 1));
    hashMap.put("Cnum", crrayList.get(j + 2));
    list.add(hashMap);
    }
    return list;
    }
    連接webservice的那個方法HttpConnSoap應該是沒問題的因為數據庫的增刪都是可以的,就是無法實現這個顯示所有信息到LISTVIEW中的這個功能不知道為什么,LOGCAT中也是一片綠沒什么問題
      LOGCAT中的信息:
    05-02 15:51:40.642: I/System.out(3678): <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><selectAllCargoInforResponse xmlns="http://tempuri.org/"><selectAllCargoInforResult><string>1</string><string>rice</string><string>100</string><string>2</string><string>dog</string><string>50</string><string>3</string><string>白癡</string><string>25</string></selectAllCargoInforResult></selectAllCargoInforResponse></soap:Body></soap:Envelope>
    05-02 15:51:40.647: I/System.out(3678): <?xml version="1.0" encoding="utf-8"?
    05-02 15:51:40.647: I/System.out(3678): soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    05-02 15:51:40.647: I/System.out(3678): soap:Body
    05-02 15:51:40.647: I/System.out(3678): selectAllCargoInforResponse xmlns="http://tempuri.org/"
    05-02 15:51:40.647: I/System.out(3678): selectAllCargoInforResult
    05-02 15:51:40.647: I/System.out(3678): 0
    05-02 15:51:40.647: I/System.out(3678): string>1</string
    05-02 15:51:40.647: I/System.out(3678): string>rice</string
    05-02 15:51:40.647: I/System.out(3678): string>100</string
    05-02 15:51:40.647: I/System.out(3678): string>2</string
    05-02 15:51:40.652: I/System.out(3678): string>dog</string
    05-02 15:51:40.652: I/System.out(3678): string>50</string
    05-02 15:51:40.652: I/System.out(3678): string>3</string
    05-02 15:51:40.652: I/System.out(3678): string>白癡</string
    05-02 15:51:40.652: I/System.out(3678): string>25</string
    05-02 15:51:40.652: I/System.out(3678): /selectAllCargoInforResult
    05-02 15:51:40.652: I/System.out(3678): 1
      ============解決方案1============
      分析原因就是在線程還沒有執行完時候,getAllInfo早已執行完畢以后,,所以在執行for (int j = 0; j < crrayList.size(); j += 3)時候, crrayList為零行。你取出的LOGCAT是執行請求以后的返回數據,這時候setListView方法早已經走完,所以只有一行數據。截圖中的一行數據來自
      HashMap<String, String> tempHash = new HashMap<String, String>();
      tempHash.put("Cno", "Cno");
      tempHash.put("Cname", "Cname");
      tempHash.put("Cnum", "Cnum");
      list.add(tempHash);
      使用Thread應該配合Handler來使用。
      我把代碼修改一下
    private final static int   REQUEST_SUCCESS = 1;
    private final static int   REQUEST_FALSE = 0;
    private void RequestData()
    {
    arrayList.clear();
    brrayList.clear();
    crrayList.clear();
    new Thread(new Runnable() {
    @Override
    public void run() {
    // TODO Auto-generated method stub
    crrayList = Soap.GetWebServre("selectAllCargoInfor", arrayList, brrayList);
    Message msg = new Message();
    if(crrayList.size()>0)
    {
    msg.what = REQUEST_SUCCESS;
    }
    else
    {
    msg.what = REQUEST_FALSE;
    }
    // 發送消息
    mHandler.sendMessage(msg);
    }
    }).start();
    }
    public Handler mHandler = new Handler(){
    // 接收消息
    @Override
    public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    super.handleMessage(msg);
    switch (msg.what)
    {
    case REQUEST_SUCCESS:
    setListView();
    break;
    case REQUEST_FALSE:
    // 做錯誤處理
    break;
    default:
    break;
    }
    }
    };
    private void setListView() {
    listView.setVisibility(View.VISIBLE);
    List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    list = dbUtil.getAllInfo();
    adapter = new SimpleAdapter(MainActivity.this, list, R.layout.adapter_item,
    new String[] { "Cno", "Cname", "Cnum" },
    new int[] { R.id.txt_Cno, R.id.txt_Cname, R.id.txt_Cnum });
    listView.setAdapter(adapter);
    }
    public List<HashMap<String, String>> getAllInfo() {
    List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    HashMap<String, String> tempHash = new HashMap<String, String>();
    tempHash.put("Cno", "Cno");
    tempHash.put("Cname", "Cname");
    tempHash.put("Cnum", "Cnum");
    list.add(tempHash);
    for (int j = 0; j < crrayList.size(); j += 3) {
    HashMap<String, String> hashMap = new HashMap<String, String>();
    hashMap.put("Cno", crrayList.get(j));
    hashMap.put("Cname", crrayList.get(j + 1));
    hashMap.put("Cnum", crrayList.get(j + 2));
    list.add(hashMap);
    }
    return list;
    }
      執行RequestData就可以,我沒法編譯,細節自己再調整看一下,應該能解決問題了。
      你給的分數太少了,大牛們都不給你解答。如果解決問題就給分哈。
      另外,Java多線程的操作可以系統學習一下。工作中使用極為頻繁

    posted on 2014-12-11 23:42 順其自然EVO 閱讀(885) 評論(0)  編輯  收藏 所屬分類: android

    <2014年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人黄网站片免费视频 | 久久天天躁狠狠躁夜夜免费观看| 亚洲国产精品综合久久久| 人妻在线日韩免费视频| 久久久久亚洲av毛片大| 一区二区视频免费观看| 亚洲精品无码久久毛片| jizz免费在线影视观看网站| 亚洲国产精品尤物yw在线| 人妻仑刮八A级毛片免费看| 亚洲国产精品成人一区| 一级毛片免费在线观看网站| 国产亚洲精品久久久久秋霞| 最近免费字幕中文大全| 亚洲大尺度无码专区尤物| 日韩电影免费在线观看| 97se亚洲综合在线| 国产福利在线免费| 亚洲另类无码专区首页| 免费看小12萝裸体视频国产| 黄色一级视频免费观看| 国产亚洲精品不卡在线| 国产免费MV大全视频网站| 亚洲AV无码专区国产乱码电影| 中文字幕亚洲免费无线观看日本| 国产极品粉嫩泬免费观看| 免费国产高清毛不卡片基地| JLZZJLZZ亚洲乱熟无码| 久久国产精品2020免费m3u8| 亚洲一卡二卡三卡| 四虎影院永久免费观看| 三年片免费高清版 | 一区二区三区免费高清视频| 亚洲线精品一区二区三区| 亚洲成a人片在线不卡一二三区| 成人永久免费福利视频网站| 爽爽爽爽爽爽爽成人免费观看| 亚洲视频免费在线看| 日本免费一区二区三区最新vr| 中文字幕免费在线看线人动作大片| 亚洲人成网站在线播放影院在线|