سؤال

لدي برنامج نشاط بسيط في Android. في الأساس الفصل يمتد النشاط فقط. ولكن عندما أبدأ ، أحصل على classcastexception في مُنشئ صفي. ليس لدي حتى مُحدد ، لذلك يجب أن يكون في مُنشئ الفئة الفائقة وهو النشاط.

لسوء الحظ ، لا يقدم مصحح الأخطاء أي معلومات مفصلة عن الفصل الذي تحاول إلقاؤه.

ها هو stacktrace:

Thread [<1> main] (Suspended (exception RuntimeException))  
    ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649  
    ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232 
    ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125    
    ActivityThread$H.handleMessage(Message) line: 2071  
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 521  
    ZygoteInit$MethodAndArgsCaller.run() line: 868  
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method]  

وعندما أنظر إلى RunTimeException أحصل عليه:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

الرمز الوحيد هو

package com.test;
import android.app.Activity;
public class MyApp extends Activity {

}
هل كانت مفيدة؟

المحلول

  1. يفتح AndroidManifest.xml
  2. ابحث عن علامة application
  3. إزالة السمة android:name (إذا كانت موجودة)
  4. اضف ميزة android:name="android.app.Application"

هذا ما فعلته وذهبت المشكلة.

ملاحظة: في الخطوة 4 ، استخدم اسم فئة التطبيق المخصص إذا كان لديك واحد (هذا اختياري).

نصائح أخرى

كان لي نفس المشكلة.

في حالتي ، كان لدي فئة تم توسيعها التي تمت الإشارة إليها في ملف البيان كسممة لعلامة التطبيق.

عندما قمت بإعادة تشغيل Eclipse في الفصل ، لم تتضمن المرجع في البيان (بشكل مفهوم ولكن محبطًا ومربحًا) مما أدى إلى هذه المسألة.

يرتبط هذا أيضًا بإجابة Maxim ولكن يبدو أن التفسير هو التباين.

عندما قمت بتغيير اسم السمة لمطابقة الملف الذي أعيد تسميته في حل المشكلة.

لقد ارتكبت خطأً سخيفًا ،

my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);

وهذا تسبب في classcastexception..

لقد غيرت هذا إلى ما هو واضح ،

my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);

وعملت ..

لا أعرف كيف ، لكن كل ما يمكنني قوله هو أن مثل هذه الأخطاء السخيفة يمكن أن تسبب أيضًا المشكلة أعلاه ..

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

أضف هذا ونشر manifest.xml الكامل الخاص بك

لقد واجهت نفس المشكلة التي تحدث من حين لآخر ، وأحيانًا تتم تشغيلها عن طريق إعادة ترتيب العناصر في تخطيط XML.

إذا سمحت للتطبيق بالاستمرار في التنفيذ بعد الاستثناء غير المطلوب ، فيجب أن تجد أنك تحصل على مجموعة أكبر بكثير في "ADB Logcat" مما يمكنك الخروج من مصحح الأخطاء بسهولة عند توقفه.

سيؤدي هذا عادةً إلى توجيهك إلى الموقع الذي حدث فيه الاستثناء فعليًا ، والذي ليس بشكل عام هو الموقع الذي يتوقف فيه في مصحح الأخطاء.

في حالتي ، يبدو أنه غير متطابق بين معرفات الموارد - يبدو أن تحريك الأشياء في ملف XML يخلط بين الأشياء بحيث عندما قمت بعرض. كنت ألقي الكائن إلى TextView ، والتي كان ينبغي أن تكون صالحة تمامًا وفقًا لمحتويات تخطيط XML الخاص بي ، لكنها كانت تتعطل.

قد تجد أن لديك بالفعل خطأ في حيث تقوم بعمل طاقم غير صالح ، مما سيؤدي بالتأكيد إلى حدوث هذا الاستثناء ، ولكن في حالتي تجبر على حل المشكلة - قام بتجديد التخطيطات المترجمة ومعرفات الموارد من نقطة الصفر ، وكل شيء يعمل كما هو متوقع.

إذا كنت تستخدم خرائط Google:

<uses-library android:name="com.google.android.maps" /> 

تذكر هذا الخط. لا أصدق أنني نسيت ذلك وأضيع الكثير من الوقت.

وأنا أتفق مع إجابة ماهيش .. سيحدث هذا بسبب تعيين العرض دون إلقاء ...

سيحدث هذا أيضًا إذا كنت تقوم بإلقاء طريقة عرض ImageButton لعرض زر أو فئة عرض أخرى.

واجهت نفس المشكلة ، وأكتشف ، أن هذا تسبب في استخدام خاطئ في التفضيلات. xml<CheckBoxPreference android:key="@+id/string" />يجب أن يكون التغيير إلى<CheckBoxPreference android:key="string" />

لقد واجهت مشكلة مماثلة مع ClassCastexception أخبرني أنني لم أستطع إلقاء edittext كـ TextView. لم أكن أحاول. حاول تنظيف المشروع لكنه تلقى العديد من الأخطاء "لا يمكن حذف الملف ...". الكسوف المغلق ، أعيد فتحه ، وقام بتنظيف المشروع. ذهبت المشكلة بعيدا. من الواضح أن هذا لن ينجح في كل حالة ، لكنه احتمال واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top