天文计算:J2SE代码woking,但不在android中

时间:2014-05-31 13:07:49

标签: java android astronomy

我是Android开发的新手,我正在尝试开发一个日历应用程序。我能够生成一个日历。后来我试图在每个日期添加vedic占星术信息。我有一个用于计算这些信息的Java程序。所以我将所有这些代码(18个java文件,以及许多双值操作)复制到我的日历应用程序中并尝试运行,但这次我只得到一个黑屏。

ComputeDailyPanchangam computeDailyPanchangam=new ComputeDailyPanchangam();
computeDailyPanchangam.setPanchangamType(Panchangam.Type.VEDIC_ENGLISH);
computeDailyPanchangam.setLongitudeLatitude(-67.28, 9.97);
GregorianCalendar temp=(GregorianCalendar)gCalendar.clone(); //GregorianCalendar instance for a date
computeDailyPanchangam.setDate(temp);
DailyPanchangam panchangam=computeDailyPanchangam.getDailyPanchangam();//Computes astrology information for the day,
                                                                      // Nakshatra, thithi, karana, yoga etc.

代码有很多计算,如月亮黄道经度和太阳黄道经度计算,日出时间计算等日期,也需要实例化多个对象。

任何机构都可以帮我完成此申请。

1 个答案:

答案 0 :(得分:1)

你只得到黑屏的原因是你在UI线程上进行这些计算(Android中的主线程也是UI线程)。在完成这些长时间计算之前,不会返回视图。

要解决此问题,您需要将计算移动到另一个线程。我建议使用AsyncTask,它允许您在计算完成时更新UI。

创建一个这样的内部类:

private class MyTask extends AsyncTask<Void, Integer, Void> { 

    protected Void doInBackground(Void... params) {
        // Add the long running calculations in here...
        // If you want, you can make periodic calls to the UI thread,
        // by using the publishProgress() method, for example:
        for (int x = 0 ; x < 10 ; x++) {
            publishProgress(x);
        }
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        // This method will be called everytime you call publishProgress().
        // Everything within this method will be called on the UI thread.
        // You can delete this method if you don't want to use it.
    }

    protected void onPostExecute(Void results) {
        // Anything you put in here will be called on the UI thread,
        // once doInBackground has finished
    }
}