java - Android 不执行普通的 Java 类

标签 java android class methods static

您好,我在 Activity 中有以下代码:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    NamazTimesManager nt = NamazTimesManager.getInstance(lm);
            ...
   }
}

getInstance()是普通Java类中的静态方法(与 Activity 相同的包):

public static NamazTimesManager getInstance(LocationManager lm) {
    if (instance == null) {
        instance = new NamazTimesManager(lm);
    }
    return instance;
}

我已经调试了所有内容,但他从未到达静态方法。相反,我得到了一些未找到的源、类加载器等......异常。 LocationManager 也已正确初始化......我不知道该怎么办。请帮忙!

我遇到以下异常:

02-09 11:51:34.463: W/dalvikvm(12270): threadid=1: thread exiting with uncaught exception (group=0x41f9a600)
02-09 11:51:34.533: E/AndroidRuntime(12270): FATAL EXCEPTION: main
02-09 11:51:34.533: E/AndroidRuntime(12270): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.khuddam.namazapp/de.khuddam.namazapp.MainActivity}: java.lang.NullPointerException
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.ActivityThread.access$600(ActivityThread.java:151)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1330)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.os.Looper.loop(Looper.java:155)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.ActivityThread.main(ActivityThread.java:5536)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at java.lang.reflect.Method.invokeNative(Native Method)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at java.lang.reflect.Method.invoke(Method.java:511)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1074)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at dalvik.system.NativeStart.main(Native Method)
02-09 11:51:34.533: E/AndroidRuntime(12270): Caused by: java.lang.NullPointerException
02-09 11:51:34.533: E/AndroidRuntime(12270):    at de.khuddam.namazapp.NamazTimesManager.<init>(NamazTimesManager.java:41)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at de.khuddam.namazapp.NamazTimesManager.getInstance(NamazTimesManager.java:29)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at de.khuddam.namazapp.MainActivity.onCreate(MainActivity.java:44)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.Activity.performCreate(Activity.java:5066)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1102)
02-09 11:51:34.533: E/AndroidRuntime(12270):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
02-09 11:51:34.533: E/AndroidRuntime(12270):    ... 11 more

构造函数:

protected NamazTimesManager(LocationManager lm) {
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double longitude = location.getLongitude();
    double latitude = location.getLatitude();

    LatitudeLongitude ll = new LatitudeLongitude(latitude, longitude);
    TimeZone gmt = TimeZone.getTimeZone("Europe/London");
    Calendar cal = Calendar.getInstance();
    boolean dst = false;

    sunriseAPI = Sun.sunriseTime(cal, ll, gmt, dst);
    sunsetAPI = Sun.sunsetTime(cal, ll, gmt, dst);

    String sunriseString = sunriseAPI.getHours() + ":" + sunriseAPI.getMinutes();
    String sunsetString = sunsetAPI.getHours() + ":" + sunsetAPI.getMinutes();
    SimpleDateFormat format = new SimpleDateFormat("HH:mm");

    try {
        sunriseDate = format.parse(sunriseString);
        sunsetDate = format.parse(sunsetString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

最佳答案

检查 namazTimeManager 的第 41 行,也许构造函数中的 lm 变量为 null。您可能应该在使用之前测试您的输入。

PS:我在发帖前没有读过评论,nickT 可能有答案。

关于java - Android 不执行普通的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658669/

相关文章:

java - Spring Validator 接口(interface)的 supports() 方法到底是如何工作的?

c++ - 根据ID值选择正确的派生类

android - 更改 PreferenceScreen 时保持操作栏显示

android - 使用Build Variants将应用从Beta推广到Google Play上的正式生产

python - 使函数可调用的函数无法正常工作

c++ - C++中指针初始化

java - 将超出范围的 int 转换为 char。精度损失真的是一个问号吗?

java - 编辑文本文件中的一行

java - 如何将 CharSequence 与字符串进行比较 - Android

android - IronSource 奖励视频加载