在Android AsyncTask中获取StreamCorruptedException

时间:2014-08-22 10:58:31

标签: java android android-asynctask

我正在实现一个与Servlet交互的AsyncTask。我得到了证书和挑战(ChallengeMes​​sage),我回答了这个挑战,然后我得到了一个验证答案(字符串)。

当我将ChallengeMes​​sage发送到servlet(我在代码中执行的唯一writeObject())时,我不知道为什么会出现StreamCorrupted异常。这是我的doInBackground方法。

我知道这不是你见过的最好的代码,这只是一些快速测试。

protected String doInBackground(Object... params) {

    try {           

        URL url = new URL("ValidURL");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        Log.i("URL", "VERIFIER CREATED");

        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("PUT");

        ObjectOutputStream out = new ObjectOutputStream(connection.getOutputStream());
        ObjectInputStream in = new ObjectInputStream(connection.getInputStream());
        Log.i("STREAM", "STREAMS CREATED");            

        //Receive CA certificate + challenge
        ChallengeMessage challenge = (ChallengeMessage) in.readObject();
        certificateCA = challenge.getCertificate();
        byte[] nonce = challenge.getNonce();
        //Log.i("Nonce", nonce.toString());

        //Hash challenge and send back with user certificate
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hashedNonce = md.digest(nonce);
        //Log.i("Digest", hashedNonce.toString());

        ChallengeMessage challengeResponse = new ChallengeMessage(hashedNonce, (X509Certificate)params[1]);           
        out.writeObject(challengeResponse); //Here I get the StreamCorruptedException
        out.flush();            

        String mResp = (String) in.readObject();
        Log.i("ANSWER",mResp);            

        in.close();
        out.close();
        connection.disconnect();

        return mResp;

    } catch(ProtocolException e) {
        Log.i("VERIFIER", e.toString());
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();        
    }

    return "False";
}

这就是StackTrace

    08-22 12:43:23.764: W/System.err(30506): java.io.StreamCorruptedException
08-22 12:43:23.774: W/System.err(30506):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1528)
08-22 12:43:23.774: W/System.err(30506):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
08-22 12:43:23.774: W/System.err(30506):    at cat.urv.tfg.tasks.VerifyCredentialsTask.doInBackground(VerifyCredentialsTask.java:76)
08-22 12:43:23.774: W/System.err(30506):    at cat.urv.tfg.tasks.VerifyCredentialsTask.doInBackground(VerifyCredentialsTask.java:1)
08-22 12:43:23.774: W/System.err(30506):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-22 12:43:23.774: W/System.err(30506):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-22 12:43:23.774: W/System.err(30506):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-22 12:43:23.774: W/System.err(30506):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-22 12:43:23.774: W/System.err(30506):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-22 12:43:23.784: W/System.err(30506):    at java.lang.Thread.run(Thread.java:841)

0 个答案:

没有答案