1

メソッドから値を取得し、別のクラスにトーストとして表示しようとしています(メソッドが機能することを確認するため)。理解できないように見えるヌルポインター例外が発生しています。複数の異なることを試しました。「This」と「That」の文字列値を指定してみました。それから私の丸太猫は私に言います

04-05 21:17:29.633: E/AndroidRuntime (18838): java.lang.RuntimeException: アクティビティ ComponentInfo {com.cerealBarApps/com.cerealBarApps.Testing} を開始できません: android.content.res.Resources$NotFoundException: 文字列リソース ID #0x0

これは、すべてを実行するために使用したいクラスです。

public class Testing extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String Testeroni = "This";
        String Testerhynocerous = "That";

        LoginTest test = new LoginTest();

        Toast.makeText(getApplicationContext(), (test.TestUsername(Testeroni)),
                Toast.LENGTH_SHORT).show();

        Toast.makeText(getApplicationContext(),
                (test.TestPassword(Testerhynocerous)), Toast.LENGTH_SHORT)
                .show();

    }
}

これは、メソッドを実行するために呼び出しているクラスです。

public class LoginTest {

    // 0 = Username length is less than 4 or greater than 15
    // 1 = Username character is not a letter/or digit
    // 9 = Everything is okay in username :)
    public int TestUsername(String username) {
        if (username.length() <= 4 || username.length() >= 15) {

            return 0;
        }

        for (int i = 0; i < username.length(); i++) {
            if (Character.isDigit(username.charAt(i))
                    || Character.isJavaLetter(username.charAt(i))) {
                System.out.println("");
                // Do Nothing
            } else

                return 1;
        }
        return 9;
    }



        // 2 = Passowrd length is less than 4 or greater than 15
        // 3 = Password character is not a digit
        // 8 = Everything is okay in password :)
        public int TestPassword(String password) {
            if (password.length() <= 4 || password.length() >= 15) {
                return 2;
            }

            for (int i = 0; i < password.length(); i++) {
                if (Character.isDigit(password.charAt(i))
                        || Character.isJavaLetter(password.charAt(i))) {
                    System.out.println("");
                    // Do Nothing
                } else
                    return 3;
            }
            return 8;
        }
    }
4

2 に答える 2

1

問題はここにあります:

Toast.makeText(getApplicationContext(), (test.TestUsername(Testeroni)),
            Toast.LENGTH_SHORT).show();

TestUsername は int を返し、もちろん有効ではないリソース ID として解釈されます。

次のように変更します。

Toast.makeText(getApplicationContext(), String.valueOf((test.TestUsername(Testeroni))),
            Toast.LENGTH_SHORT).show();
于 2012-04-06T01:27:19.767 に答える
1

これらのコード:

Toast.makeText(getApplicationContext(), (test.TestUsername(Testeroni)),
            Toast.LENGTH_SHORT).show();

    Toast.makeText(getApplicationContext(),
            (test.TestPassword(Testerhynocerous)), Toast.LENGTH_SHORT)
            .show();

問題がtest.TestUsername(Testeroni)ありtest.TestPassword(Testerhynocerous)、戻り値の型が int であるため、文字列の res id のように考えると、次のように変更できます。

 Toast.makeText(getApplicationContext(), (""+test.TestUsername(Testeroni)),
            Toast.LENGTH_SHORT).show();

    Toast.makeText(getApplicationContext(),
            (""+test.TestPassword(Testerhynocerous)), Toast.LENGTH_SHORT)
            .show();
于 2012-04-06T01:28:12.920 に答える