【问题标题】:Android doesnt execute normal Java classAndroid 不执行正常的 Java 类
【发布时间】:2014-03-06 16:33:40
【问题描述】:

您好,我在 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类中的静态方法(与活动相同的包):

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();
    }
}

【问题讨论】:

  • 是否有异常抛出?请张贴logcat
  • 好的,我已经发布了日志
  • NamazTimesManager 构造函数有什么作用?我很确定你传递了一个空的 LocationManager 给它
  • 它只获取最后一个已知位置,获取 longiutede 等...
  • 看起来像 getLastKnownLocation 问题的另一个空位置。此方法将返回 null,直到您修复了位置

标签: java android class methods static


【解决方案1】:

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

PS:发帖前我没看过cmets,nickT可能有答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 2020-11-17
    • 2016-10-25
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多