2013-09-16 14 views
5

Uwalniam ORMlite. Tak, mam tej klasy DAO fabrykaAwaria aplikacji z "android.app.Application nie może być rzutowany na"

public class DtoFactory extends Application { 

    private SharedPreferences preferences; 
    private DatabaseHelper databaseHelper = null; 

    private Dao<ReleveEntity, Integer> releveDAO = null; 

    @Override 
    public void onCreate() { 
      super.onCreate(); 
      preferences = PreferenceManager.getDefaultSharedPreferences(this); 
      databaseHelper = new DatabaseHelper(this); 
    } 

    public SharedPreferences getPreferences() {return preferences;} 

    public Dao<ReleveEntity, Integer> getReleveDao() throws SQLException, java.sql.SQLException { 
      if (releveDAO == null) { 
       releveDAO = databaseHelper.getDao(ReleveEntity.class); 
      } 
      return releveDAO; 
    } 

    @Override 
    public void onTerminate() { 
      super.onTerminate(); 
      if (databaseHelper != null) { 
        OpenHelperManager.releaseHelper(); 
        databaseHelper = null; 
      } 
    } 
} 

a zasadniczo, pokażę tylko ten linie gdzie mam problem:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    dtoFactory = (DtoFactory) getApplication(); 

a manifest.xml

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.exercice.ftouzi.ReleveActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="com.exercice.ormdatabase.DtoFactory" > 
    </activity> 
</application> 

błąd wiadomość jest:

E/AndroidRuntime(19672): FATAL EXCEPTION: main 
E/AndroidRuntime(19672): java.lang.RuntimeException: Unable to start activity 
     ComponentInfo{com.formation.adapter/com.exercice.ftouzi.ReleveActivity}: 
     java.lang.ClassCastException: android.app.Application cannot be cast to 
     com.exercice.ormdatabase.DtoFactory 

można pomóż mi rozwiązać ten problem?

+0

Problem jest tak jak mówi komunikat, który próbujesz rzucić android.app.Application do com.exercice .ormdatabase.DtoFactory, a to się nie powiedzie. DtoFactory jest podklasą aplikacji android.app.Application, więc możesz rzutować obiekty DtoFactory na android.app.Application, ale nie odwrotnie. Zastanówcie się, skąd pochodzą brakujące informacje? – bgse

Odpowiedz

29

musisz określić swój zwyczaj Application (tj DtoFactory) w AndroidManifest.xml

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:name="com.exercice.ormdatabase.DtoFactory"> 
    <activity 
     android:name="com.exercice.ftouzi.ReleveActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 
+0

Zrobiłem to, umieściłem mój plik manifest.xml i nie pracuję –

+0

Zawarłeś to jako "Activity", ale musisz określić go jako 'Application'. Sprawdź zaktualizowaną odpowiedź. – Rajesh

+1

Uratowałeś mi życie! Dzięki, sir –

Powiązane problemy