我制作了一个带有小部件的应用程序,当我在手机上添加或删除小部件,或者在主屏幕上使用小部件重新启动手机时,会出现错误“不幸,时钟停止了”。 (时钟是我的应用程序的名称。)小部件工作正常,但我需要摆脱错误消息。 Eclipse没有说有任何问题。
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tzemachzr.clock"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<activity
android:name="com.tzemachzr.clock.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.tzemachzr.clock.ClockWidgetProvider">
<intent-filter>
<action
android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/clock_appwidget" />
</receiver>
</application>
</manifest>
小部件布局
<?xml version="1.0" encoding="utf-8"?>
<AnalogClock xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</AnalogClock>
App Widget Provider(res-xml-clock_appwidget.xml)
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="140dp"
android:minWidth="140dp"
android:initialLayout="@layout/clock_appwidget_layout" android:resizeMode="horizontal|vertical">
</appwidget-provider>
logcat的
E/AndroidRuntime( 5480): FATAL EXCEPTION: main
08-12 15:56:27.433 E/AndroidRuntime( 5480): java.lang.RuntimeException: Unable to instantiate receiver com.tzemachzr.clock.ClockWidgetProvider: java.lang.ClassNotFoundException: com.tzemachzr.clock.ClockWidgetProvider
08-12 15:56:27.433 E/AndroidRuntime( 5480): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2383)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at android.app.ActivityThread.access$1500(ActivityThread.java:139)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at android.os.Handler.dispatchMessage(Handler.java:99)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at android.os.Looper.loop(Looper.java:156)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at android.app.ActivityThread.main(ActivityThread.java:4977)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at java.lang.reflect.Method.invokeNative(Native Method)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at java.lang.reflect.Method.invoke(Method.java:511)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at dalvik.system.NativeStart.main(Native Method)
08-12 15:56:27.433 E/AndroidRuntime( 5480): Caused by: java.lang.ClassNotFoundException: com.tzemachzr.clock.ClockWidgetProvider
08-12 15:56:27.433 E/AndroidRuntime( 5480): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
08-12 15:56:27.433 E/AndroidRuntime( 5480): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2378)
08-12 15:56:27.433 E/AndroidRuntime( 5480): ... 10 more
08-12 15:56:27.453 D/Launcher.Model( 1729): DbDebug Add item (null) to db, id: 66 (-100, 2, 0, 2)
08-12 15:56:27.453 E/EmbeddedLogger( 1598): App crashed! Process: com.tzemachzr.clock
08-12 15:56:27.453 E/EmbeddedLogger( 1598): App crashed! Package: com.tzemachzr.clock v1 (1.0)
08-12 15:56:27.463 E/EmbeddedLogger( 1598): Application Label: Clock
08-12 15:56:27.513
答案 0 :(得分:1)
你有一个ClassNotFoundException,这意味着android没有找到类
com.tzemachzr.clock.ClockWidgetProvider
编辑:
好的,似乎基础知识还不清楚。
您需要一个名为ClockidgetProvider的类。 该类扩展了AppWidgetProvider并使用存储在clock_appwidget.xml中的元数据。
因此,当您在Android清单中声明接收器时,android会创建一个接收器,它包含您的AppWidgetProvider类和元数据。
参见示例:
package com.tzemachzr.clock;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
public class ClockWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
您的元数据xml文件是正确的。 添加此课程,看看是否能解决您的问题。
PS:你可以设置标志,只需调用:
System.out.println("hello");
这将在您的Logcat中打印“hello”!