سؤال

أحصل على هذا الاستثناء بينما أحاول استدعاء نشاط من آخر. الاستثناء الكامل هو

Android.Content.ActivityNotFoundException: غير قادر على العثور على فئة نشاط صريحة {com.xy/com.xyclass} ؛

أنا أفعل intent.setClass("com.x.y","com.x.y.className") أين className هو اسم فئة النشاط الخاصة بي و com.x.y هي الحزمة التي يقيم فيها.

يحتوي AndroidManifest.xml على المحتوى التالي:

<activity android:name="com.x.y.className" android:label="@string/app_name">

هل أفتقد أي شيء؟

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

المحلول

ربما تحتاج إلى التحقق من أنك أضفت النشاط الجديد إلى ملف MASTEST.XML

مثال:

<activity
      android:name=".className" 
      android:label="@string/app_name" > 
</activity>

نصائح أخرى

إذا كان هناك أشخاص آخرون يواجهون شيئًا مشابهًا ووصلوا إلى هذا المنشور ، فقد يوفر لك مشكلة بعض الوقت. قد لا تكون مرتبطة بمشكلة OP ولكن DEF تتعلق باستثناء ActivityNotfound.

كنت أحاول تحميل نشاط باستخدام:

Intent intent = new Intent( this, class );

ومع ذلك ظللت باستمرار الحصول على ActivityNotFoundException على الرغم من أنني قمت بفحص الكود وإعادة فحصه عدة مرات.

هذا الاستثناء الذي كنت أحصل عليه لم يكن ناتجًا بالفعل عن النية ولكن بعض التعليمات البرمجية التي كنت أقوم بتشغيلها داخل النشاط المحمّل وهو يرمي أ RuntimeException. (كان سبب مشكلتي Typeface.createFromAsset())

من الممكن أن تتواجد إلى RunTimeException مماثلة في نشاطك.

لمعرفة ما إذا كان هذا هو الحال ، ضع رمز النية الخاص بك في محاولة كتل الصيد. مثل ذلك:

try {
    /* your code */
    ...
} catch ( ActivityNotFoundException e) {
    e.printStackTrace();
}

قم بتشغيل التطبيق الخاص بك مرة أخرى ، وتحقق من logcat ، إذا كانت هذه المشكلة نفسها ، فستحصل على RunTimeException مع "سبب:" يشير إلى مشكلتك الفعلية.

قضيت ساعة جيدة في محاولة لمعرفة ذلك. نأمل أن ينقذ هذا شخص ما بعض الوقت.

يجب أن يظهر النشاط الذي تتصل به ليس فقط في بيان الحزمة الخاصة به ، ولكن في بيان حزمة الاتصال أيضًا.

احذف نشاطك من البيان ثم أضفه مرة أخرى. هذا النوع لا يكتب نوع XML مباشرة. بدلا من ذلك ، انتقل إلى Application > Application nodes > add, ، اختر النشاط ، ثم تصفح لمصدر الملف.

هذا عمل بالنسبة لي.

يأخذ Intent.SetClass المعلمات كـ "سياق الحزمة" و "الفئة". مثال على ذلك:

intent.setClass(CurrentActivity.this, TargetActivity.class);

كما تحتاج إلى التحقق مما إذا كان النشاط مسجلًا في ملف واضح.

تمت إضافة نشاط جديد وعدده في Missest.xml ، لكنني كنت لا أزال أتمكن من "غير قادر على العثور على فئة نشاط صريحة". أنا أستخدم Eclipse. كان الحل لمشكلتي هو "تنظيف" المشروع. من القائمة الرئيسية في Eclipse: Project | Clean .... ثم يمكنك تحديد مشروعك وتنظيفه.

مهلا ، تحتاج إلى استخدام شكل آخر من مُنشئ النوايا. سيؤدي هذا بالتأكيد إلى حل مشكلتك خلال الثانية:

مثال:

Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");

startActivity(inte);

هذا يعمل بشكل مثالي وفحصت هذا الرمز ، يعمل بشكل صحيح.

كان لدي ActivityNotfoundException عندما قمت بتطبيق النشاط داخل فئة أخرى (كطبقة داخلية):

//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
    }
}
//...

أعلن على أنه ما يلي داخل البيان:

<activity android:name=".Pref.Activity"
...

بعد إعلان ذلك كطبقة طبيعية (مسبقة من الطبقة العامة) وتغيير البيان وفقًا لذلك ، عملت كالمعتاد.

كنت أستخدم getActivityContext() (بدلاً من Activity.this) للحصول على رمز القائمة لحفظ بعض الأعمال ، ونسخه وملصقه إلى كل نشاط دون التحرير في كل مرة.

لقد استبدلتهم بـ Activity.this, وذهب القضية.

لدي شعور بأن رجل Android أكثر ذكاءً يمكن أن يعمل على عدم الاضطرار إلى القيام بذلك. أود أن أسمع ما سيكون عليه.

النظر في الوثائق هنا ما تريده هو:

intent.setClassName("com.x.y", "className");

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

بالإضافة إلى إجابة مينا. عندما تعلن النشاط كصف ثابت داخلي ، يجب عليك كتابة نشاطك إلى ظهور مثل ...

         <activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />

هنا .app يأتي من اسم الحزمة الخاص بك ، يمكن أن يكون .helpers.afdfa $ afda

كان الحل الخاص بي لهذا الخطأ هو إضافة اسم حزمة أمام الاسم في البيان.

كان لدي الأنشطة التالية:

  • id.scanner.main.a1

  • id.scanner.main.gallery.a2

احتوى بياني على ما يلي:

<activity android:name=".A1" ....></activity>
<activity android:name=".A2" ....></activity>

هذا حل المشكلة:

<activity android:name=".A1" ....></activity>
<activity android:name="gallery.A2" ....></activity>

نعم حصلت على هذه المشكلة أيضًا. لقد قمت بتحديث المشروع. وبعد ذلك ، كل شيء يعمل بشكل جيد.

عندما يكون لدي نفس القضية. إذا كنت تستخدم ملفات فئة المكتبة وكتابتها في ملفات Android البيئية ، فاكتبها ، ثم قم بإزالة ملفات مشاريع المكتبة هذه الجزء >> فسيعمل على الإطلاق ..

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

باستخدام ADT الإصدار 20 ، يمكننا القيام بذلك عن طريق إضافة البيان أدناه في Project.properties من تطبيق الاتصال.

ManySestmerger.Enabled = صحيح

تحقق من محتوى ملف Android البيان في مجلد Bin للمشروع. عندما يتم تجميع التطبيق الخاص بك وتعبئته ، يتم نسخ ملف البيان إلى مجلد BIN. في حالتي ، لم يتفق البيان في مجلد بن مع البيان الأصلي. ربما هذا خطأ في الكسوف. لقد قمت يدويًا بنسخ البيان إلى مجلد بن وعمل.

يمكنك إضافة هذا الرمز في manifiest.xml ملف

action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"

حصلت على نفس القضية أيضًا. بعد قراءة إجابة thepearson ، قمت بمراجعة نشاطي واكتشفت أنني كتبت

public void onCreate(Bundle s)

ولكن في الواقع يجب أن يكون

protected void onCreate(Bundle s)

وهو يعمل الآن!

هذا يعمل إذا كان لديك كائن نشاط (الذي تحتاج إلى تشغيله):

intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());

النشاط الذي تسميه لا يحتوي على "sheme" وتحتوي على مرشح نية:

<activity android:name=".SecondActivity">
        <intent-filter>
               <action android:name="com.example.sj.myapplication.SecondActivity"/>
               <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</activity>

لذلك في رمز الاتصال:

Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);

حاول استخدام ما يلي:

intent.setClassName("com.x.y", "com.x.y.className");

هذا يعمل بالنسبة لي

كان لي نفس القضية. جربت كل شيء ما عدا الخطأ ، الذي قمت بفرزه لاحقًا ، هو أن هناك مساحة متبقية بين عروض الأسعار المزدوجة واسم الفصل. يجب أن يكون:intent.setClassName("com.x.y","com.x.y.className")

ليس

intent.setClassName("com.x.y","  com.x.y.className")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top