2013-09-16 58 views
5

Tôi đang phân phối ORMlite. Vì vậy, tôi có lớp Factory DAO nàyLỗi ứng dụng với “android.app.Application không thể truyền tới”

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; 
      } 
    } 
} 

Và trong Main, tôi sẽ chỉ đường này, nơi tôi có vấn đề:

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

Và 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> 

Lỗi thông báo là:

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 

Bạn có thể hãy giúp tôi giải quyết vấn đề này?

+0

Vấn đề là cũng giống như thông điệp cho biết, bạn đang cố gắng để cast android.app.Application để com.exercice .ormdatabase.DtoFactory, và điều này không thành công. DtoFactory là một phân lớp của android.app.Application, vì vậy bạn có thể cast các đối tượng DtoFactory vào android.app.Application, nhưng không phải ngược lại. Hãy nghĩ về nó, thông tin còn thiếu đến từ đâu? – bgse

Trả lời

29

Bạn cần phải xác định tùy chỉnh của bạn Application (ví dụ, DtoFactory) trong 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

Tôi đã làm điều đó, tôi đặt tệp manifest.xml của mình và tôi không làm việc –

+0

Bạn đã bao gồm nó dưới dạng 'Hoạt động', nhưng bạn cần phải chỉ định nó là 'Ứng dụng'. Kiểm tra câu trả lời được cập nhật. – Rajesh

+1

Bạn đã cứu mạng tôi! Cảm ơn ngài –