2012-02-09 13 views
6

Tôi không biết tại sao điều này lại xảy ra. Khi tôi kiểm tra DDMS không có thư mục tập tin quá. Tôi đang cố truy cập thư mục này tại lớp con Ứng dụng của tôi. Bất kỳ ý tưởng tại sao điều này đang xảy ra? Tôi cần bối cảnh ứng dụng để toàn cầu để tôi có thể sử dụng trên các lớp không mở rộng Hoạt động.Ngữ cảnh ứng dụng trả về null khi sử dụng getFilesDir()

package mci.multipratic; 

import java.io.File; 
import java.io.FileInputStream; 
import java.util.Properties; 
import android.app.Application; 
import android.content.Context; 

public class MultiPraticApp extends Application 
{ 
private static MultiPraticApp instance; 
public static MultiPraticAppHelper helper; 

public MultiPraticApp() 
{  
    instance = MultiPraticApp.this; 
    helper = new MultiPraticAppHelper(); 
} 

public static Context getContext() 
{  
    return instance; 
} 
} 

class MultiPraticAppHelper 
{ 
private int offsets = 0; 
private int productIndex = 0; 
private int recipeId = 0; 
private Recipe selectedRecipe; 
private Properties configFile; 

public MultiPraticAppHelper() 
{ 
    Context context = MultiPraticApp.getContext();      

    String path = context.getFilesDir() + "/config.properties"; 

    File file = new File(path); 

    try 
    { 
     FileInputStream fis = new FileInputStream(file); 

     Properties properties = new Properties(); 
     properties.load(fis); 

     fis.close(); 
    }catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
} 

file manifest của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="mci.multipratic" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="4" /> 

<application android:name=".MultiPraticApp"   
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" />     
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".EnableProductsActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">   
    </activity> 

    <activity 
     android:name=".RecipeSelectionActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">   
    </activity> 

    <activity 
     android:name=".ProductAdjustsActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 
     > 
    </activity>    
</application> 

+0

Bạn đang thử trên trình mô phỏng hoặc thiết bị thực tế? Người này đã theo dõi nó xuống đến một vấn đề giả lập: http://stackoverflow.com/questions/6779833/getfilesdir-returning-null – CaseyB

+0

Oh yeh, vâng, tôi đã nhận được câu hỏi này nhưng tôi đang sử dụng một thiết bị thực tế. –

+0

Bạn sẽ khởi chạy 'Hoạt động' này như thế nào? Đây có phải là 'Hoạt động' chính trong ứng dụng của bạn không? – CaseyB

Trả lời

6

Tôi tin rằng vấn đề là bạn đang cố gắng để làm khởi trong constructor. Di chuyển mã trong hàm tạo sang lớp OnCreate of Application.

@Override 
public void onCreate() { 
    super.onCreate(); 
    if(instance != null) 
    instance = MultiPraticApp.this; 
    if(helper != null) 
    helper = new MultiPraticAppHelper(); 

} 
+0

Ồ, đó là điều này, cảm ơn. Tôi chỉ không hiểu tại sao cách khác không hiệu quả. Tôi đã chắc chắn các nhà xây dựng đang chạy. –

+1

Bắt tốt! Tôi bỏ lỡ điều đó! Bối cảnh không hợp lệ trong Constructor! – CaseyB

+0

Ohhh Tôi hiểu .. cảm ơn vì đã làm rõ điều này! –

Các vấn đề liên quan