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);
精彩评论