无法启动活动ComponentInfo java.lang.NullPointerException

时间:2011-08-03 06:30:12

标签: android

实际上我有两个java clases,其中一个是活动类,现在来自该活动类我想调用第二类的函数,它不是一个活动类..所以一切正常,但当我在该函数内部使用SharedPreferences时告诉我一个错误,“无法启动活动ComponentInfo java.lang.NullPointerException”..两个java文件的代码是..请任何人帮助..

第一个java文件的代码:

public class SplashScreen extends Activity 
{
    public void onCreate(Bundle savedInstanceState) 
    {
          super.onCreate(savedInstanceState);

          setContentView(R.layout.splash_screen);


          CycleManager.getSingletonObject().test();//call functions of another class

    }
}

第二个java文件的代码:

public class CycleManager 
{       

    private static CycleManager cycleMangrObject;       

    private CycleManager() {            
            onInitialization(); 

            //Compute averages using data loaded from register
            ComputeAverages();
    }

    public static synchronized CycleManager getSingletonObject() {          
            if (cycleMangrObject == null) {
            cycleMangrObject = new CycleManager();
            }

            return cycleMangrObject;
    }

    public Object clone() throws CloneNotSupportedException {           
            throw new CloneNotSupportedException();

    }

    public void test()
    {
        SharedPreferences preferences1 =getSharedPreferences("myPreferences", 0);
    }


public void setAlertOnDevice(){                 
                //Delete data
                Uri EVENTS_URI = Uri.parse(getCalendarUriBase(this) + "events");
                int id = 1; // calendar entry ID
                ContentResolver cr = getContentResolver();
                EVENTS_URI= ContentUris.withAppendedId(EVENTS_URI, id);
                cr.delete(EVENTS_URI, "calendar_id=1", null);
                Resources res=getResources();

                //set Alerts in device calendar
                Date dtStartDate = CycleManager.getSingletonObject().getStartDate();

                boolean bDeleteAndReturn = false;

                Calendar cal = Calendar.getInstance();


                if (dtStartDate.getTime() ==  CycleManager.getSingletonObject().getDefaultDate().getTime())
                {
                        bDeleteAndReturn = true;
                        dtStartDate = cal.getTime();
                }  

                getOffsetsForCycleStages(CycleManager.getSingletonObject().iAvgCycleTime);

                if(bDeleteAndReturn==false)
                {
                    if (CycleManager.getSingletonObject().bNextCycleAlert && iStart>0)
                    {
                        cal.setTime(dtStartDate);
                        cal.add(Calendar.DATE, iStart);                   
                       // ContentResolver cr = getContentResolver();
                        String str=res.getString(R.string.alert_start);
                        String strDescription=res.getString(R.string.alert_start_msg);
                        ContentValues values = new ContentValues();
                        values.put("calendar_id", 1);
                        values.put("title", str);
                        values.put("description", strDescription);
                        values.put("dtstart", cal.getTimeInMillis()); 
                        values.put("dtend", cal.getTimeInMillis()); 
                        cr.insert(EVENTS_URI, values);
                    }
                    if (CycleManager.getSingletonObject().bSafeAlert)
                    {
                         if (iSafe1>0)
                         {
                            cal.setTime(dtStartDate);
                            cal.add(Calendar.DATE, iSafe1);                       
                          //  ContentResolver cr = getContentResolver();
                            String str=res.getString(R.string.alert_safe);
                            String strDescription=res.getString(R.string.alert_safe_msg) + " " + new Integer(iUnsafe1-iSafe1-1);
                            ContentValues values = new ContentValues();
                            values.put("calendar_id", 1);
                            values.put("title", str);
                            values.put("description", strDescription);
                            values.put("dtstart", cal.getTimeInMillis()); 
                            values.put("dtend", cal.getTimeInMillis()); 
                            cr.insert(EVENTS_URI, values);
                         }
                         if (iSafe2>0)
                         {
                             cal.setTime(dtStartDate);
                             cal.add(Calendar.DATE, iSafe2);                           
                           //  ContentResolver cr = getContentResolver();
                             String str=res.getString(R.string.alert_safe);
                             String strDescription=res.getString(R.string.alert_safe_msg) + " " + new Integer(CycleManager.getSingletonObject().iAvgCycleTime-iSafe2-1);
                             ContentValues values = new ContentValues();
                             values.put("calendar_id", 1);
                             values.put("title", str);
                             values.put("description", strDescription);
                             values.put("dtstart", cal.getTimeInMillis()); 
                             values.put("dtend", cal.getTimeInMillis()); 
                             cr.insert(EVENTS_URI, values);     
                         }
                    }
                    if (CycleManager.getSingletonObject().bUnsafeAlert)
                    {
                         if (iUnsafe1>0)
                         {
                             cal.setTime(dtStartDate);
                             cal.add(Calendar.DATE, iUnsafe1);                         
                            // ContentResolver cr = getContentResolver();
                             String str=res.getString(R.string.alert_unsafe);
                             String strDescription=res.getString(R.string.alert_unsafe_msg) + " " + new Integer(iFertile-iUnsafe1-1);
                             ContentValues values = new ContentValues();
                             values.put("calendar_id", 1);
                             values.put("title", str);
                             values.put("description", strDescription);
                             values.put("dtstart", cal.getTimeInMillis()); 
                             values.put("dtend", cal.getTimeInMillis()); 
                             cr.insert(EVENTS_URI, values);
                         }
                         if (iUnsafe2>0)
                         {
                             cal.setTime(dtStartDate);
                             cal.add(Calendar.DATE, iUnsafe2);
                            // ContentResolver cr = getContentResolver();
                             String str=res.getString(R.string.alert_unsafe);
                             String strDescription=res.getString(R.string.alert_unsafe_msg) + " " + new Integer(iSafe2-iUnsafe2-1);
                             ContentValues values = new ContentValues();
                             values.put("calendar_id", 1);
                             values.put("title", str);
                             values.put("description", strDescription);
                             values.put("dtstart", cal.getTimeInMillis()); 
                             values.put("dtend", cal.getTimeInMillis()); 
                             cr.insert(EVENTS_URI, values);
                         }
                    }
                    if (CycleManager.getSingletonObject().bFertileAlert && iFertile>0)
                    {
                        cal.setTime(dtStartDate);
                        cal.add(Calendar.DATE, iFertile);
                       // ContentResolver cr = getContentResolver();
                        String str=res.getString(R.string.alert_fertile);
                        String strDescription=res.getString(R.string.alert_fertile_msg) + " " + new Integer(iUnsafe2-iFertile-1);
                        ContentValues values = new ContentValues();
                        values.put("calendar_id", 1);
                        values.put("title", str);
                        values.put("description", strDescription);
                        values.put("dtstart", cal.getTimeInMillis()); 
                        values.put("dtend", cal.getTimeInMillis()); 
                        cr.insert(EVENTS_URI, values);
                    }
                    if (CycleManager.getSingletonObject().bPMSAlert)
                    {
                        cal.setTime(dtStartDate);
                        cal.add(Calendar.DATE, iStart-7);                     
                      //  ContentResolver cr = getContentResolver();
                        String str=res.getString(R.string.alert_pms);
                        String strDescription=res.getString(R.string.alert_pms_msg);
                        ContentValues values = new ContentValues();
                        values.put("calendar_id", 1);
                        values.put("title", str);
                        values.put("description", strDescription);
                        values.put("dtstart", cal.getTimeInMillis()); 
                        values.put("dtend", cal.getTimeInMillis()); 
                        cr.insert(EVENTS_URI, values);
                    }
                }
    }

    private String getCalendarUriBase(Activity act){            
                String calendarUriBase = null;
                Uri calendars = Uri.parse("content://calendar/calendars");
                Cursor managedCursor = null;

                try 
                {
                    managedCursor = act.managedQuery(calendars, null, null, null, null);
                } 
                catch (Exception e) {}

                if (managedCursor != null) 
                {
                    calendarUriBase = "content://calendar/";
                }              
                else 
                {
                    calendars = Uri.parse("content://com.android.calendar/calendars");
                    try 
                    {
                        managedCursor = act.managedQuery(calendars, null, null, null, null);
                    } 
                    catch (Exception e){}

                    if (managedCursor != null) 
                    {
                        calendarUriBase = "content://com.android.calendar/";
                    }
                }
                return calendarUriBase;
    }

3 个答案:

答案 0 :(得分:2)

它不可能,因为其他类不知道有什么叫做SharedPreference ..所以

public void test(Context c)
    {
        SharedPreferences preferences1 =c.getSharedPreferences("myPreferences", 0);
    }

并且在呼叫时

CycleManager.getSingletonObject().test(this);//call functions of another class

再次

c.getContentResolver().delete(EVENTS_URI, null, null);

答案 1 :(得分:1)

CycleManager.getSingletonObject().test(this);

 public void test(Context c)
    {
   SharedPreferences prefs;
 prefs = PreferenceManager.getDefaultSharedPreferences(c); 
}

答案 2 :(得分:0)

不,你不能在普通的简单java类中使用Activity或Android函数。因为你只能在那个Simple Java Class中使用java库

一种可能的解决方案是:

在活动中创建公共静态SharedPreferences对象并创建SplashScreen对象,如下所示:

public static SharedPreferences pref = null;  
public static SplashScreen sp;

在Splash Screen的onCreate中执行此操作

sp = this;

在你的java类方法中执行此操作

SplashScreen.pref = SplashScreen.sp.getSharedPreferences("my pref", 0);