开发者

Unable to start activity ComponentInfo java.lang.NullPointerException

Actually I have two java classes of which one is an activity class. Now from that activity class, I want to call a function of second class which is not in an activity class. So all works fine but when I use SharedPreferences inside that function it shows me an error Unable to start activity ComponentInfo java.lang.NullPointerException. Please, anyone help.

code for first java file:

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

code for second java file:

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 Int开发者_如何学Ceger(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;
    }


Its not possible because the other class does't know there something called SharedPreference.. so

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

and while calling

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

and again

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


CycleManager.getSingletonObject().test(this);

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


No you cannot use the Activity or Android functions in an ordinary simple java class. Since you can only use java library in that Simple Java Class

One possible solution is:

Create a public static SharedPreferences object in an activity and Create an object of SplashScreen like this:

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

In onCreate of Splash Screen do this

sp = this;

In your java Class method do this

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜