2016-05-09 14 views
-2

私が作成したインテントからintを抽出しようとしていますが、2番目のメソッドは "java.lang.Stringをintに変換できません"というエラーをスローします。なぜこれが起こるのですか?"(Integer)getIntent()。getStringExtra(x)"とはどのように "getExtras()。get(x)"が異なっていますか?

(Integer)getIntent().getExtras().get(x) 

これはを取得します。あなたが最初のものがある

getIntent().getIntExtra("x", 0) 

または

getIntent().getExtras().getInt("x") 

答えて

1

キーxに基づいてを入力し、キャストしようとするとIntegerになります。 get()が何かを返すと、実行時にClassCastExceptionでクラッシュします。

第二つある:

(Integer)getIntent().getStringExtra(x) 

これはキーxに基づいStringを取得しIntegerとしてそれをキャストすることを試みます。 ObjectIntegerである可能性があります。そのため、最初のコンパイルは実行時に失敗する可能性があります。 StringIntegerである可能性はありません。したがって、これはコンパイル時に失敗します。

正しい答えは、氏のオレグ・ノートとして、getExtras()によって返さBundleIntentgetInt()getIntExtra()を呼び出すことです。

1

を使用する必要がint値を取得する

おかげ

0

これはすべて鋳造についてです。
getIntent()。getExtras()。get(x)はObject型を返します。
while(Integer)getIntent()。getStringExtra(x)はString型のObjectを返します。

すべてのJava Classは、オブジェクトをデフォルトで拡張し、toString()などのmehtodsを取得します。
これは、ObjectをANYクラスにキャストしようとする理由です。試してみてください。失敗した場合は、実行時にしか知りません。

一方、StringはすでにObjectに拡張されており、Integerとは無関係のクラスであり、独自の値とプロパティです。
StringからIntegerにキャストしようとすると、エラーが発生します。

最良の解決策は既に公開されています。
これを行うことができます:

getInteger(getIntent().getStringExtra(x)); 
関連する問題