0

Androidプラットフォームで復号化タスクを実行しています。まず、RunDecrypt というメソッドを作成します。UIのボタンを押すとうまくいきます。以下に示す方法:

public void runDecrypt() throws IOException{
    EditText editText = (EditText) findViewById(R.id.fileName);
    EditText editText2 = (EditText) findViewById(R.id.keyName);

    String fileName = editText.getText().toString();
    String keyName = editText2.getText().toString();

    File sdcard = Environment.getExternalStorageDirectory();
    File file = new File(sdcard , fileName);
    File key  = new File(sdcard, keyName);


    BufferedReader brFile;
    String Cipher = null;
    try{
        //Read file line by line and concat each line of string in file with space character.
        FileInputStream fstream = new FileInputStream(file);
        brFile = new BufferedReader(new InputStreamReader(fstream));

        String tempString;

        while((tempString = brFile.readLine()) != null){

            if(Cipher == null){
                Cipher = tempString;

            }else{
                Cipher = Cipher.concat(" ");
                Cipher = Cipher.concat(tempString);

            }

        }

    }catch(Exception e){
        //messageBox("Decrypt", e.getMessage());
    }

    BufferedReader brKey;
    String DecKey = null;

    try{
        FileInputStream fstream = new FileInputStream(key);
        brKey = new BufferedReader(new InputStreamReader(fstream));
        DecKey = brKey.readLine();

    }catch(Exception e){
        //messageBox("Decrypt", e.getMessage());
    }


    try{
        byte[] cipherByte = DES.parseBytes(Cipher);
        String decKey = DES.convertStringToHex(DecKey);

        byte[] keyByte = DES.parseBytes(decKey);
        String decryptResult = DES.hex(DES.decryptCBC(cipherByte, keyByte));

        String temp = decryptResult.replace(" ", "");
        String finalDecrypt = temp.substring(0, (temp.length() - DES.getConcatCount()));
        String finResult = DES.convertHexToString(finalDecrypt);

        TextView FinalResult = (TextView)findViewById(R.id.decryptText);
        FinalResult.setText(finResult);

    }catch(Exception e){
        messageBox("Decrypt", "Please Upload File Properly");
    }
}

正常に動作するので、バックグラウンドで作業を実行するために Async Task を使用してこのメ​​ソッドを実装しようとしています。実装したクラスを以下に示します。

private class runDecrypt extends AsyncTask <URL , Integer, Long> {
     private final ProgressDialog dialog = new ProgressDialog(Homepage.this);
     AlertDialog.Builder builder = new AlertDialog.Builder(Homepage.this);
    @SuppressWarnings("resource")
    @Override
    protected Long doInBackground(URL... params) {
        EditText editText = (EditText) findViewById(R.id.fileName);
        EditText editText2 = (EditText) findViewById(R.id.keyName);

        String fileName = editText.getText().toString();
        String keyName = editText2.getText().toString();

        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard , fileName);
        File key  = new File(sdcard, keyName);


        BufferedReader brFile;
        String Cipher = null;
        try{
            //Read file line by line and concat each line of string in file with space character.
            FileInputStream fstream = new FileInputStream(file);
            brFile = new BufferedReader(new InputStreamReader(fstream));

            String tempString;

            try {
                while((tempString = brFile.readLine()) != null){

                    if(Cipher == null){
                        Cipher = tempString;

                    }else{
                        Cipher = Cipher.concat(" ");
                        Cipher = Cipher.concat(tempString);

                    }

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }catch(java.io.FileNotFoundException e){
            System.out.println("File could not be found.");
        }

        BufferedReader brKey;
        String DecKey = null;
        try{
            FileInputStream fstream = new FileInputStream(key);
            brKey = new BufferedReader(new InputStreamReader(fstream));
            try {
                DecKey = brKey.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }catch(java.io.FileNotFoundException e){
            System.out.println("Key file could not be found.");
        }

        String decKey = DES.convertStringToHex(DecKey);     
        byte[] cipherByte = DES.parseBytes(Cipher);
        byte[] keyByte = DES.parseBytes(decKey);
        String decryptResult = DES.hex(DES.decryptCBC(cipherByte, keyByte));

        String temp = decryptResult.replace(" ", "");
        String finalDecrypt = temp.substring(0, (temp.length() - DES.getConcatCount()));
        String finResult = DES.convertHexToString(finalDecrypt);

        TextView FinalResult = (TextView)findViewById(R.id.decryptText);
        FinalResult.setText(finResult);
        return null;
    }
    protected void onPreExecute() {
         this.dialog.setMessage("Decrypting...");
         this.dialog.show();
      }

    protected void onPostExecute(Long result) {

        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
         }
        builder.setMessage("Decryption Completed");
        builder.show();

    }
    protected void onProgressUpdate(int progress) {
        setProgress(progress * 100);
    }
}

私の onClick メソッド:

public void onClick (View v){
    Intent browse = new Intent(this, Browse.class);
    switch (v.getId()){
    case R.id.browseFile:
        browse.putExtra("browse","file");
        startActivityForResult(browse, 1);
        break;
    case R.id.browseKey:
        browse.putExtra("browse", "key");
        startActivityForResult(browse, 1);
        break;
    case R.id.decrypt:
        new runDecrypt().execute();
        break;

    default:
        break;
    }
}

以下に示す私のlogcat: ログキャット

誰でも助けてもらえますか?ありがとうございます!

4

2 に答える 2

-1

Shashank kadhe が述べたように、onPostExecute メソッドでこれを試して、必要に応じて変更してください。

protected void onPostExecute(String file_url) {

String fileName = editText.getText().toString();
        String keyName = editText2.getText().toString();

        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard , fileName);
        File key  = new File(sdcard, keyName);

BufferedReader brFile;
    String Cipher = null;
    try{
        //Read file line by line and concat each line of string in file with space character.
        FileInputStream fstream = new FileInputStream(file);
        brFile = new BufferedReader(new InputStreamReader(fstream));

        String tempString;

        while((tempString = brFile.readLine()) != null){

            if(Cipher == null){
                Cipher = tempString;

            }else{
                Cipher = Cipher.concat(" ");
                Cipher = Cipher.concat(tempString);

            }

        }

    }catch(Exception e){
        //messageBox("Decrypt", e.getMessage());
    }

    BufferedReader brKey;
    String DecKey = null;

    try{
        FileInputStream fstream = new FileInputStream(key);
        brKey = new BufferedReader(new InputStreamReader(fstream));
        DecKey = brKey.readLine();

    }catch(Exception e){
        //messageBox("Decrypt", e.getMessage());
    }


    try{
        byte[] cipherByte = DES.parseBytes(Cipher);
        String decKey = DES.convertStringToHex(DecKey);

        byte[] keyByte = DES.parseBytes(decKey);
        String decryptResult = DES.hex(DES.decryptCBC(cipherByte, keyByte));

        String temp = decryptResult.replace(" ", "");
        String finalDecrypt = temp.substring(0, (temp.length() - DES.getConcatCount()));
        String finResult = DES.convertHexToString(finalDecrypt);

        TextView FinalResult = (TextView)findViewById(R.id.decryptText);
        FinalResult.setText(finResult);

    }catch(Exception e){
        messageBox("Decrypt", "Please Upload File Properly");
    }
}

Since it's work fine, I try to implement this method with Async Task for running my work in background. The class that implemented shown below:

private class runDecrypt extends AsyncTask <URL , Integer, Long> {
     private final ProgressDialog dialog = new ProgressDialog(Homepage.this);
     AlertDialog.Builder builder = new AlertDialog.Builder(Homepage.this);
    @SuppressWarnings("resource")
    @Override
    protected Long doInBackground(URL... params) {
        EditText editText = (EditText) findViewById(R.id.fileName);
        EditText editText2 = (EditText) findViewById(R.id.keyName);

        String fileName = editText.getText().toString();
        String keyName = editText2.getText().toString();

        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard , fileName);
        File key  = new File(sdcard, keyName);


        BufferedReader brFile;
        String Cipher = null;
        try{
            //Read file line by line and concat each line of string in file with space character.
            FileInputStream fstream = new FileInputStream(file);
            brFile = new BufferedReader(new InputStreamReader(fstream));

            String tempString;

            try {
                while((tempString = brFile.readLine()) != null){

                    if(Cipher == null){
                        Cipher = tempString;

                    }else{
                        Cipher = Cipher.concat(" ");
                        Cipher = Cipher.concat(tempString);

                    }

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }catch(java.io.FileNotFoundException e){
            System.out.println("File could not be found.");
        }

        BufferedReader brKey;
        String DecKey = null;
        try{
            FileInputStream fstream = new FileInputStream(key);
            brKey = new BufferedReader(new InputStreamReader(fstream));
            try {
                DecKey = brKey.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }catch(java.io.FileNotFoundException e){
            System.out.println("Key file could not be found.");
        }

        String decKey = DES.convertStringToHex(DecKey);     
        byte[] cipherByte = DES.parseBytes(Cipher);
        byte[] keyByte = DES.parseBytes(decKey);
        String decryptResult = DES.hex(DES.decryptCBC(cipherByte, keyByte));

        String temp = decryptResult.replace(" ", "");
        String finalDecrypt = temp.substring(0, (temp.length() - DES.getConcatCount()));
        String finResult = DES.convertHexToString(finalDecrypt);

        TextView FinalResult = (TextView)findViewById(R.id.decryptText);
        FinalResult.setText(finResult);
}
}
于 2013-10-06T11:21:30.653 に答える