我是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.
代码有很多计算,如月亮黄道经度和太阳黄道经度计算,日出时间计算等日期,也需要实例化多个对象。
任何机构都可以帮我完成此申请。
答案 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
}
}