添加小部件时出错:不幸的是," MyApp"已经停止

时间:2014-08-12 07:16:57

标签: android eclipse android-intent android-activity android-fragments

我制作了一个带有小部件的应用程序,当我在手机上添加或删除小部件,或者在主屏幕上使用小部件重新启动手机时,会出现错误“不幸,时钟停止了”。 (时钟是我的应用程序的名称。)小部件工作正常,但我需要摆脱错误消息。 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 

1 个答案:

答案 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”!