0

そのため、私は Android に比較的慣れていないため、Web ベースの CSV ドキュメントを解析し、このドキュメントの 2 つの値をアプリで使用しようとしています。既に CSV ドキュメントを正常に解析しましたが、1 行しかありませんでした。解析しようとしているドキュメントは次のようになります。

Light,2012-08-20T11:04:42.407301Z,107
Temperature,2012-08-20T11:04:42.407301Z,24   

「107」と「24」の値を取得しようとしています。誰でもこれを行う方法を説明できますか? これは、CSV データの 1 行を正常に解析できる現在の CSV パーサー クラスのコードです。

public class CSVParser {
    static InputStream is = null;
    private String value;

    public String getCSV(String url) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        try {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] RowData = line.split(",");
                value = RowData[2];
                // do something with "data" and "value"
            }
        } catch (IOException ex) {
            // handle exception
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                // handle exception
            }
        }
        return value;
    }
}
4

2 に答える 2

2

value = rowData[2] を割り当てていることがわかります。これは、2 行の csv では、行を読み取るたびに値を割り当てるときに 24 のみを返すように見えます。つまり、最初に 107 が割り当てられ、次の readLine で 24 で上書きされます。

値変数を配列 (取得する項目の数がわかっている場合) または複数の文字列を保持できるリストにする必要があります。次に、各 readLine ループでこの配列またはリストに追加します。

初めてです( value を として使用する場合List<string>

  while ((line = reader.readLine()) != null) {
    string[] RowData = line.split(",");
    value.add(RowData[2]);
  }

最初のラウンドではリストに 107 が追加され、次の行では 24 が追加されます。

于 2012-08-20T11:28:27.170 に答える
1

あなたは正しい考えを持っています - したがって、あなたの考えでは、行がなくなるまで、ストリーム内の行ごとに while ループが 1 回実行されます (readline は null を返します)。

次に、split を使用して 1 つの行を複数の文字列に分割します。あなたの場合、分割は3つの配列を返す必要があります(リスト内の3つのコンマ区切り要素)

  • RowData[0] にはテキストの説明が含まれます (例: Light)
  • RowData[1] にはタイムスタンプが含まれます
  • RowData[2] には、必要な数が含まれます

整数が必要な場合は、 Integer.Parse(RowData[2]) のようなことをしたいかもしれません

于 2012-08-20T11:24:56.387 に答える