2011-08-03 11 views
1

ビルドインアンドロイドのApplication.classを使用しようとしていますが、使用するたびにNullPointerExceptionと表示されます。アプリケーションクラスについての説明が必要

これは私が使用しているクラスである:私は私のカスタムクラス、extends Applicationアクセスしてる方法を示すために、コードのいくつかの作品を共有するつもりです

public class SharedProperties extends Application { 

    private String currentCategory; 
    private String dataNews; 

    public SharedProperties() { 
     super(); 
    } 

    public String getCurrentCategory() { 
     return currentCategory; 
    } 

    public void setCurrentCategory(String currentCategory) { 
     this.currentCategory = currentCategory; 
    } 

    public String getDataNews() { 
     return dataNews; 
    } 

    public void setDataNews(String dataNews) { 
     this.dataNews = dataNews; 
    } 

} 

を...と、この方法私が設定し、それから値を取得する:

SharedProperties shared = ((SharedProperties)getApplication()); 
    shared.setCurrentCategory(categories[currentCategory]); 
    shared.setDataNews(rssList.get(position).getData()); 

    ...... 

    SharedProperties shared = ((SharedProperties)getApplication()); 
    String category = shared.getCurrentCategory(); 
    String newstext = shared.getDataNews(); 

が、私はそれが間違ってアクセスしてる方法ですか私はSharedProperties.classに何かを欠場しますか?ここで

が私のマニフェストです:手始めに

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.news.reader" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="4" /> 

    <application android:name="SharedProperties" android:icon="@drawable/logo" android:label="@string/app_name"> 
     <activity android:name="Splash" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="Home" 
      android:label="@string/app_name" 
      android:screenOrientation="sensor" 
      android:configChanges="keyboardHidden|orientation" /> 
     <activity android:name="News" 
      android:label="@string/app_name" 
      android:screenOrientation="sensor" 
      android:configChanges="keyboardHidden|orientation" /> 
    </application> 

    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

</manifest> 
+0

スタックトレースとマニフェスト宣言を取得できますか? –

+0

Applicationクラスから派生する目的は何ですか? – Jack

+0

@ Dan:AndroidManifest.xmlに何かを宣言する必要がありますか? – nenito

答えて

2

を追加してみてくださいすることはない別のエンティティとして、すべてのあなたの活動が含まれてい<application>エントリでandroid:name属性を入れてください。クラスの完全修飾名(たとえば、com.this.is.your.package.SharedPreferences)に変更します。

また、これを行わないでください。 singletonを使用してください。 をください。

+0

私はすでにSingletonでそれを行っていますが、私がそれを使用しているときに 'NullPointerException'を得る理由を理解したいと思います。 – nenito

+1

なぜSingletonですか?、AndroidアプリのApplicationクラスは単一のインスタンスです。 –

+1

'Application'クラスの拡張を許可するのは、Android 1.0と1.1の遺物です。また、特定のAndroidオペレーション中にクラスの拡張バージョンを使用することは保証されていません( 'BackupManager'が気になります)。なぜあなたは完全に制御している別のシングルトンを使用しないのですか? –

1

、あなたのアプリケーションクラスの名前はSharedProperties、ないMyAppあるので、それにキャストする必要があります。

第二に、Androidはカスタムアプリケーションを使用することを知るためには、あなたがそうのようなあなたのAndroidManifest.xmlでそう言う必要があります。

<application 
    android:name="SharedProperties" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 
+1

android:name属性は、アプリケーションクラス名用です。 jrobinson3k1が正しいです。 –

0

私は同様の問題があったが、ドンは、まさに私が何をしたか覚えていますが、やります

public SharedProperties() 
{ 

     super(); 
} 
+1

これはワットjrobinson3k1でも言えます。ここにlogcatトレースを投稿すると助けになります – Kavitha

+0

これは既に暗黙のうちに行われています。明示的に指定されていない場合、デフォルトのコンストラクタはオブジェクト階層を呼び出されます。 –

関連する問題