2

私はそのようなクエリ文字列を持っています:

ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife&Content=racroi&TimeStamp=2012-11-05T17:20:06.056

そして、私はJavaオブジェクトを持っています:

LogObject{
    private String ObjectGUId;
    private String ObjectType;
    private String ObjectTitle;
    private String Content;
    private String TimeStamp;
}

したがって、このクエリ文字列をこの Java オブジェクトに解析したいと考えています。

多くの質問を検索して読みましたが、まだ正しい答えが得られていません。

この問題を解決できるものを教えてください。

4

3 に答える 3

3

@Sonrobby がコメントしているように、クエリ文字列を自分のクラスにプッシュする必要が本当にない場合 (必要な場合もあります)、手動で解析する代わりに、URLDecoder を使用できます。

String qString = "ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife";
Uri uri = Uri.parse(URLDecoder.decode("http://dummy/?" + qString, "UTF-8"));
if (uri != null) {
    for(String key: uri.getQueryParameterNames()) {
        System.out.println("key=[" + key + "], value=[" + uri.getQueryParameter(key) + "]");
    }
}            

「ダミー」は汚れているように見えますが、クエリ文字列値 (qString) しかない場合は必要です。完全な URL がある場合は、URLDecoder に直接渡すだけで完了です。

于 2013-10-15T01:08:49.400 に答える
2

エチケット

  1. 試したことと、なぜうまくいかなかったのかについて、もっと具体的に説明する必要があります。

  2. ここでは、適切なコード サンプルLogObjectが非常に役立ちます。

  3. 理想的には、SSCCEを提供して、他のユーザーが自分の問題を簡単にテストできるようにすることをお勧めします。

答え

次のように名前:値のペアを抽出できます。

String toParse = "ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife&Content=racroi&TimeStamp=2012-11-05T17:20:06.056";
String[] fields = toParse.split("&");
String[] kv;

HashMap<String, String> things = new HashMap<String, String>();


for (int i = 0; i < fields.length; ++i)
{
    t = fields[i].split("=");
    if (2 == kv.length)
    {
        things.put(kv[0], kv[1]); 
    }
}

私はそれらを HashMap に入れることを選択しましたが、名前の部分 ( kv[0]) を見て、それを使って何かをすることを選択することも簡単にできます。例えば:

if kv[0].equals("ObjectGUId")
{
    logObject.setGUId(kv[1]); // example mutator/setter method
}
else if //...

ただし、すべてのフィールドLogObjectはプライベートであり、メソッドを示していないため、外部からそれらを設定する方法があることを願っています...ペアを何らかのデータ構造に保存する必要があることに注意してください(私が a で行ったように)コンストラクター呼び出しの後にフィールドを設定するのではなく、すべてのフィールドでHashMapa を初期化する場合。LogObject

SSCCEといえば、この回答用に作りました

于 2012-11-08T03:29:06.453 に答える