Как преобразовать объект в строку в J2ME для Nokia Asha?

Я разрабатываю для Nokia Asha и использую библиотеку Tantalum для выполнения своих HTTP-запросов через класс HTTPPoster.

Когда задача выполняется, я пытаюсь получить значение из заголовка X-Session-Id из остальных заголовков ответа, они возвращаются в виде HashTable, значение в этом заголовке мне нужно преобразовать в хэш SHA256.

Но я не могу преобразовать значение, полученное из HashTable, в строку.

Мой код выглядит так:

final HttpPoster httpPoster = new HttpPoster(Task.FASTLANE_PRIORITY, completeURL);
        httpPoster.setRequestProperty("Content-Type", "application/json");
        httpPoster.setPostData(new byte[]{});
        httpPoster.chain(new Task(Task.FASTLANE_PRIORITY){

            protected Object exec(Object in) throws CancellationException,
                    TimeoutException, InterruptedException {
                // TODO Auto-generated method stub
                System.out.println("Task is executing");

                String tmpSessionId = new String(httpPoster.getResponseHeaders().get("X-Session-Id").toString().getBytes());

                byte[] input = null;
                try {
                    input = new String("X-Session-Sig" + tmpSessionId + "test").getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    System.out.println("Unsupported encoding exception");
                    e.printStackTrace();
                }

                byte[] key = new byte[4];
                int tmpInt = new Random().nextInt();
                key[0] = (byte)(tmpInt >> 24);
                key[1] = (byte)(tmpInt >> 16);
                key[2] = (byte)(tmpInt >> 8);
                key[3] = (byte)(tmpInt);


                Digest digest = new SHA256Digest();
                HMac hmac = new HMac(digest);
                hmac.init(new KeyParameter(key));
                hmac.update(input, 0, input.length);
                byte[] output = new byte[digest.getDigestSize()];
                hmac.doFinal(output, 0);
                sessionId = tmpSessionId;
                sessionSig = new String(Hex.encode(output));
                System.out.println("session id " + sessionId + " session signature " + sessionSig);
                return in;
            }
            protected void onCanceled(){
                System.out.println("Request was cancelled");
            }
        });
        httpPoster.fork();

Как видите, в строке String tmpSessionId = new String(httpPoster.getResponseHeaders().get("X-Session-Id").toString().getBytes()); я пытаюсь преобразовать в строку, а затем получить байты, но это возвращает [Ljava.lang.String;@6f7159d, а не фактическое значение, которое я ищу, даже вызов метода toString() без выполнения метода getBytes возвращает то же значение.

Как я могу получить истинное значение этого элемента в HashTable? Насколько я вижу, J2ME не поддерживает класс ObjectOutputStream. Какие есть альтернативы?


person Uriel Arvizu    schedule 08.07.2014    source источник


Ответы (1)


Я обнаружил, что часть [Ljava.lang.String;@6f7159d означает, что объект внутри HashTable представляет собой массив строк.

Поняв, что мне просто нужно привести к String[]:

String[] stringArray = (String[]) dotREZApi.getCurrentRequest().getResponseHeaders().get("X-Session-Id");
String tmpSessionId = stringArray[0];

Это вернуло мне значение, которое я ожидал.

person Uriel Arvizu    schedule 08.07.2014