2013-04-09 78 views
0

昨天我开始在Eclipse中编程为Android,我做了简单的程序(Hello world!) - 它正在工作,但今天我正在尝试做简单的小部件...你能看到帮我?这是在ADK和我的手机上工作的,但是: 应用程序Hello Widget(process com.example.widget)意外停止。强制关闭。Android的第一个应用程序/小工具 - Log Cat

我的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.widget" 
    android:versionCode="1" 
    android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="9" 
    android:targetSdkVersion="16" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:theme="@style/AppTheme" 
    android:name=".zachodnik" 
    android:label="@string/app_name"> 
    <receiver android:name=".zachodnik" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" android:resource="@xml/zachodnik_widget_provider" /> 
    </receiver> 
</application> 

</manifest> 

我的班 “zachodnik.java”

package com.example.widget; 

import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.ComponentName; 
import android.content.Context; 
import android.widget.RemoteViews; 
import java.util.Date; 
import java.util.Timer; 
import java.util.TimerTask; 
import static java.lang.Math.*; 



public class zachodnik extends AppWidgetProvider { 
private AppWidgetManager appWidgetManager; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     Timer timer = new Timer();   
     timer.scheduleAtFixedRate(new ZachodyWschody(context, appWidgetManager),100, 10000); 

    } 

    private class ZachodyWschody extends TimerTask{ 

     RemoteViews remoteViews; 
     ComponentName thisWidget; 
     AppWidgetManager appWidgetManager;    
     private double Wsch, Zach; 

     public ZachodyWschody(Context context,AppWidgetManager appWidgetManager){ 
      this.appWidgetManager = appWidgetManager; 
      remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main); 
      thisWidget = new ComponentName(context, zachodnik.class);     
     } 

     public void algorytm(){ 

      Date data = new Date(); 

      int R =2009;// data.getYear(); 
      int M = 10; //data.getMonth(); 
      int D = 21;//data.getDay(); 

      double Long = 19; //dane dla Krakowa 
      double Lat = 50; 
      double Req = -0.833; 
      double PI = 3.1415; 

      double J = 367*R-(int)(7*(R+(int)((M+9)/12))/4)+(int)(275*M/9)+D-730531.5; 
      double Cent = J/36525; 
      double L = (4.8949504201433+628.331969753199*Cent) % 6.28318530718; //modulo 
      double G = (6.2400408+628.3019501*Cent) % 6.28318530718; 
      double O = 0.409093-0.0002269*Cent; 
      double F = 0.033423 * sin(G) + 0.00034907 * sin(2*G); 
      double E = 0.0430398 * sin(2*(L+F)) - 0.00092502 * sin(4*(L+F)) - F; 
      double A = asin(sin(O) * sin(L+F)); 
      double C = (sin(0.017453293*Req)-sin(0.017453293*Lat)*sin(A))/(cos(0.017453293*Lat)*cos(A)); 

      Wsch = (PI - (E+0.017453293*Long+1*acos(C)))*57.29577951/15; 
      Zach = (PI - (E+0.017453293*Long+(-1)*acos(C)))*57.29577951/15; 


     } 

     @Override 
     public void run(){ 
      algorytm(); 
      int godzWsch = (int)Wsch;    
      int godzZach = (int)Zach; 

      double minWsch = 60*(Wsch-godzWsch); 
      double minZach = 60*(Zach-godzZach); 

      godzWsch = godzWsch + 2; //przesuniec dla naszej strefy czasowej 
      godzZach = godzZach + 2; 


      String wsch = String.valueOf(godzWsch+":"+(int)minWsch); 
      CharSequence w = (CharSequence)wsch; 
      String zach = String.valueOf(godzZach+":"+(int)minZach); 
      CharSequence z = (CharSequence)zach; 

      remoteViews.setTextViewText(R.id.widget_textview, "Wschód: " + w + "\nZachód:" + z); 
      appWidgetManager.updateAppWidget(thisWidget, remoteViews); 

     } 
    } 
} 

“zachodnik_widget_provider.xml”

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="72dip" 
    android:minHeight="36dip" 
    android:updatePeriodMillis="10000" 
    android:initialLayout="@layout/activity_main" 
/> 

“的strings.xml”

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="action_settings">Settings</string> 
    <string name="widget_text">Hello Widget!</string> 
    <string name="app_name">Widget Zachodnik</string> 
</resources> 

此小部件应提供有关日出和日落的信息。

这里有errors from LogCat(ImageShack的JPG)

预先感谢您的答复。

+0

某处存在ClassCastException;你应该发布堆栈跟踪的其余部分。 – etienne 2013-04-09 15:50:47

回答

0

初看起来,您已将zachodnik类定义为您的AndroidManifest.xml中的应用程序。

当你启动应用程序这是保留用于扩展android.app.Application 类,它期望应用程序对象,而不是一个的AppWidgetProvider,所以你得到的ClassCastException异常的应用程序加载器无法实例类。

在你AndroidManifest.xml删除了android: “zachodnik” NAME =从application标签

另一件事线,请注意在Java的命名约定。例如,类名应该以大写字母开头。

+0

好的。我将学习:)并非常感谢!我删除此行: android:name =“。zachodnik” 它正在工作,谢谢! – Daniel 2013-04-09 16:05:10

相关问题