Java中在类之间传递空字符串时出现问题

Java中在类之间传递空字符串时出现问题,java,android,Java,Android,我试图将一个字符串从一个类传递到另一个类,但它不是传递我需要的字符串,而是传递一个空值,这会导致我尝试执行的解密函数出错。下面是我试图实现的两个类,每个类都有详细信息: MainActivity->尝试获取从“String decrypted1=d1.encryppass(encrypted);”中获取的值 解密2类->并在此处传递上述语句“private String pinToMd5=d3.decrypted1 从我看来,问题可能就在这里 MainActivity d3 = new Main

我试图将一个字符串从一个类传递到另一个类,但它不是传递我需要的字符串,而是传递一个空值,这会导致我尝试执行的解密函数出错。下面是我试图实现的两个类,每个类都有详细信息:

MainActivity->尝试获取从“String decrypted1=d1.encryppass(encrypted);”中获取的值

解密2类->并在此处传递上述语句“private String pinToMd5=d3.decrypted1


从我看来,问题可能就在这里

MainActivity d3 = new MainActivity();
    //private String pinToMd5 = "PaSsW0rD"; //use this to test my code to confirm any changes doesn't break the logic -> this works
    private String pinToMd5 = d3.decrypted1;
您正在从MainActivity类创建新实例,并且希望对象来自堆栈中显示的实例。尝试从现有的主活动类传递上下文或引用,并在Decrypt类中分配它

    InputStream instream = getContentResolver().openInputStream(singleUri);
/*Reference from MainActivity class*/
                        Decrypt2 d2 = new Decrypt2(this);
                        String decrypted2 = d2.encrypnote(instream);

public class Decrypt2 {
//your code...

MainActivity d3;
    //private String pinToMd5 = "PaSsW0rD"; //use this to test my code to confirm any changes doesn't break the logic -> this works
private String pinToMd5;

public Decrypt2(MainActivity mainActivity)
{
    d3 = mainActivity;
    pinToMd5 = d3.decrypted1;
}
//your code...
}
不确定这是否能完全解决您的问题:)

第二个问题是这里的代码:

公共字符串pin-to-md5=md5(pinToMd5)

是否在初始化pinToMd5属性之前调用方法MD5?你什么时候需要上那门课?如果在初始化该类时没有执行此更改,请在代码中执行以下操作:

public class Decrypt2 {
//your code...

MainActivity d3;
    //private String pinToMd5 = "PaSsW0rD"; //use this to test my code to confirm any changes doesn't break the logic -> this works
private String pinToMd5;
//remove MD5(pinToMd5);
public String pin_to_md5;
SecretKeySpec secretKeySpe;


public Decrypt2(MainActivity mainActivity)
{
    d3 = mainActivity;
    pinToMd5 = d3.decrypted1;
    pin_to_md5 = MD5(pinToMd5);
    secretKeySpe = new SecretKeySpec(this.pin_to_md5.getBytes(), "AES");

}
//your code...
}
第三期 在您正在使用的MainActivity中

public String decrypted1 = "";
作为财产。但在onClick方法中,您将创建包含加密字符串的局部变量

     d1.myMethod(this);
//this code here
     String decrypted1 = d1.encryppass(encrypted);
    
     Log.i("Title:     ", name);
局部值只存在于方法内部,而不存在于类中,因此在方法中创建新变量时,请使用上面的变量。去掉那根绳子。。把代码做成这样

d1.myMethod(this);
//this code here
decrypted1 = d1.encryppass(encrypted);
        
Log.i("Title:     ", name);

你所说的其实是有道理的。在MainActivity中编译时,我确实遇到了一个问题。我要用这个错误更新我原来的帖子。@cbates79你能不能也在类中添加更改,这样我就可以看到你是如何修复的?此错误通常在使用默认构造函数而不是经过论证的构造函数时出现。您是否在MainActivity类中通过了此引用?在MainActivity中是否还有其他地方使用Decrypt2类但使用默认构造函数?我更新了代码。这应该是使用Decrypt2的唯一地点。我有一些代码使用了另一个名为just Decrypt的类,但该部分工作正常。我确实错过了“这个”参考。我更新了,但现在我的应用程序崩溃了。用我得到的错误更新。返回到空错误。从错误中可以看出,这是不同的空指针异常,MD5公共字符串pin_to_MD5=MD5(pinToMd5);SecretKeySpec secretKeySpe=新SecretKeySpec(this.pin_to_md5.getBytes(),“AES”);//null ref.这是什么MD5?在这条语句中,我们试图在null对象引用上调用虚拟方法“byte[]java.lang.String.getBytes()”。pin_to_md5对象为null,您正在尝试调用null对象上的函数
     d1.myMethod(this);
//this code here
     String decrypted1 = d1.encryppass(encrypted);
    
     Log.i("Title:     ", name);
d1.myMethod(this);
//this code here
decrypted1 = d1.encryppass(encrypted);
        
Log.i("Title:     ", name);