2

奇妙な問題があります...

私のファイルstrings.xmlには次のものが含まれています。

<?xml version="1.0" encoding="utf-8?>
<resources>
    <string name="building_name">My House</string>
</resources>

さて、私のRには次のものが含まれています。

[...]
public static final class String {
    public static final int building_name=0x7f02383;
}
[...]

したがって、コードでこの文字列を次のように呼び出そうとすると、次のようになります。

private final String BUILDING_NAME = getString(R.string.building_name);

このエラーがあります:

java.lang.RuntimeException: Unable to instanciate activity ComponentInfo{...}:          java.lang.NullPointerException
{...}
  caused by: java.lang.NullPointerException

{building_nameをインスタンス化する行}で

私のコードの何が問題になっていますか?助けてください

4

4 に答える 4

10

getStringアクティビティが初期化される前に呼び出すことはできません。getStringと同じだからですcontext.getResources().getString()。そして、コンテキストは初期化されていません。

したがって、基本的に、この方法で静的変数に値を割り当てることはできません。

ただし、静的変数でリソース文字列を使用する方法があります。このために、アプリケーションを作成し(これこれを参照)、そこからコンテキストを取得します。簡単な例を次に示します。

<manifest ...>
    ...
    <application  android:name="com.mypackage.MyApplication" ... >
       ...
    </application>
    ...
</manifest>

次に、MyApplication.javaファイルを作成します。

public class MyApplication extends Application 
{   
    private static MyApplication s_instance;

    public MyApplication ()
    {
        s_instance = this;
    }

    public static Context getContext()
    {
        return s_instance;
    }

    public static String getString(int resId)
    {
        return getContext().getString(resId);       
    }
}

そして、それを使用して文字列リソースを取得します。

private final String BUILDING_NAME = MyApplication.getString(R.string.building_name);

このモミの静的フィールドを実行することもできます。

于 2011-06-07T07:42:54.800 に答える
2

これを使用すると役立つ場合があります

getResources().getString(R.string.building_name);

これは私のために働く

于 2011-06-07T07:43:18.560 に答える
2

これが発生する場合がいくつかあります。同じように、以下に説明するいくつかの手順を試す必要があります。

  1. プロジェクトをクリーンアップしてみてください。
  2. android.Rクラスファイルがインポートされているかどうかを確認します。インポートされている場合は、削除してRクラスファイルをインポートします。
  3. getResources()。getString(R.string.myString)メソッドを使用してみてください。
于 2011-06-07T07:43:40.073 に答える
0

たとえば、あるアクティビティから別のアクティビティにテキストを取得する際にエラーが発生した場合

StudentID = getIntent().getExtras().getString("Value");

次にnullポインタ例外を与えるgetString

StudentIDは文字列型なので、StudentIDを次のように宣言するだけです。

private String StudentID;

于 2020-02-09T08:44:28.480 に答える