Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从Web服务加载ListView_Android_Web Services_Http_Tomcat_Servlets - Fatal编程技术网

Android 从Web服务加载ListView

Android 从Web服务加载ListView,android,web-services,http,tomcat,servlets,Android,Web Services,Http,Tomcat,Servlets,您好,我正在尝试通过Web服务从数据库加载数据到listview。我已经试着分两个阶段来做这件事,但在每个阶段我都不是很自信 从我的tomcat返回一个列表/数组下面是代码 String mylist[] = {"", "", "", "", "", ""}; try { Class.forName(driver).newInstance(); con = DriverManager.getConnection(url + db, user, pass); Strin

您好,我正在尝试通过Web服务从数据库加载数据到listview。我已经试着分两个阶段来做这件事,但在每个阶段我都不是很自信

  • 从我的tomcat返回一个列表/数组下面是代码

    String mylist[] = {"", "", "", "", "", ""};
    
    try {
        Class.forName(driver).newInstance();
        con = DriverManager.getConnection(url + db, user, pass);
    
        String query1 = "select username from Users where online = 'yes'";
        PreparedStatement preparedStmt1 = con.prepareStatement(query1);
        ResultSet result1 = preparedStmt1.executeQuery();
    
        int i = 0;
        while (result1.next()) {
            mylist[i] = result1.getString(1);               
        }
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    
    out.println(mylist);
    out.close();
    
  • 我的问题是,这是从Web服务返回列表的正确方法吗

  • 第二步是将列表放到我的列表视图中,下面是我的代码

    try {
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet();
        URI webservice = new URI("http://192.168.0.3:8080/Users/users");
        request.setURI(webservice);
        HttpResponse response = client.execute(request);
    
        BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity()
                        .getContent()));
    
        while ((rd.readLine()) != null) {
    
            ArrayList<String> list = rd.readLine();
        }
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    
    试试看{
    HttpClient=new DefaultHttpClient();
    HttpGet请求=新建HttpGet();
    URI webservice=新URI(“http://192.168.0.3:8080/Users/users");
    setURI(webservice);
    HttpResponse response=client.execute(请求);
    BufferedReader rd=新的BufferedReader(
    新的InputStreamReader(response.getEntity()
    .getContent());
    而((rd.readLine())!=null){
    ArrayList list=rd.readLine();
    }
    }捕获(异常e1){
    e1.printStackTrace();
    }
    
  • 这似乎只在webservice返回单行文本时起作用。如何从Http请求中检索类似数组的内容


    谢谢

    Web服务只能返回xml或字符串类型,因此您可以将列表放入如下格式的字符串中:

    "this is a string 1; this is a string 2; this is a string 3"
    
    服务器端看起来像:

      StringBuilder myList = new StringBuilder();
    
     try {
         Class.forName(driver).newInstance();
         con = DriverManager.getConnection(url + db, user, pass);
    
         String query1 = "select username from Users where online = 'yes'";
         PreparedStatement preparedStmt1 = con.prepareStatement(query1);
         ResultSet result1 = preparedStmt1.executeQuery();
    
         int i = 0;
          while (result1.next()) {
              myList.append( result1.getString(1) + ";");               
      }
    } catch (Exception e1) {
      e1.printStackTrace();
     }
    
    out.println(mylist.toString());
    out.close();
    
    然后从Android客户端,您可以通过String.split(“;”)获取它
    以下是一个示例:

    private String inputStreamToString(InputStream is)
    {
    String line = "";
    StringBuilder total = new StringBuilder();
    // Wrap a BufferedReader around the InputStream
    BufferedReader rd = new BufferedReader(new InputStreamReader(is), 1024 * 4);
    // Read response until the end
    try
    {
    
        while ((line = rd.readLine()) != null)
        {
            total.append(line);
        }
    } catch (IOException e)
    {
        Log.e(TAG, "error build string" + e.getMessage());
    }
    // Return full string
    return total.toString();
     }
    
    InputStream is = response.getEntity().getContent();
    String strResponse = inputStreamToString(is);
    String mylist[] = strResponse .split(";");
    

    或者您可以使用JSON解析列表对象并从WebService传输到Android客户端

    合并所有字符串的问题是您需要知道sql语句将返回多少个字符串,并且这些字符串会随着时间的推移而变化。对不起,也许我不太明白您到底想要什么。您可以逐行读取数据库中的数据,然后将所有行放入上面格式的字符串中并发送给客户端。您可以使用StringBuilder而不是字符串数组来构建上面格式的字符串。我还更新了我的答案。我的重点是我从数据库中获取的用于执行此操作的字符串数“这是一个字符串1;这是一个字符串2;这是一个字符串3“将动态更改,上述方法要求您知道字符串的数量。我的应用程序将有多个用户,这应该显示在特定时间登录的所有用户的列表。@Amanni:您是否检查我更新的答案?您不需要知道字符串的数量(实际上我的代码不需要它)。每当您检查联机用户时(通过查询数据库并读取到结尾),您都会将此列表发送到客户端,不是吗?因此,您可以使用数组字符串来发送,而可以使用StringBuilder将其解析为一个格式化字符串。那么,问题出在哪里?您尝试过此操作吗?抱歉,我没有看到,我现在就尝试一下