การแบ่งคลาสแอปพลิเคชันระดับโลกที่กำหนดเองด้วย“ android.app.Application ไม่สามารถส่งไปที่”


141

ฉันมีคลาสสากลที่กำหนดเองซึ่งมีลักษณะเช่นนี้

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

    public void setMainAct(String mainAct) {
        MainAct = mainAct;
    }
}

ฉันต้องการที่จะรักษาสตริงในชั้นนี้ทางอื่นActivityในของonCreateวิธีการ

    String local = "myLocalVariable";
    ((MyApp) getApplication()).setMainAct(local); //breaks here!!!
    String name = ((MyApp) getApplication()).getMainAct();

มันแบ่งบนบรรทัดที่ทำเครื่องหมายด้วยข้อผิดพลาด: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

ฉันตรวจสอบรหัสห้าครั้งแล้วและฉันไม่พบข้อผิดพลาด ใครสามารถบอกฉันว่าข้อผิดพลาดอยู่ที่ไหน!

ขอบคุณ

คำตอบ:


470

รัฐข้อผิดพลาดที่ชนิดของวัตถุที่ส่งกลับโดยมีgetApplication android.app.Applicationสาเหตุที่เป็นไปได้สำหรับสิ่งนี้คือคุณไม่สามารถกำหนดแอปพลิเคชันในรายการ ตรวจสอบให้แน่ใจว่ารายการของคุณมีบางสิ่งในบรรทัด:

<application android:name=".MyApp"...
</application>

8
โอ้พระเจ้าคุณถูกต้อง และฉันได้สูญเสียชั่วโมงที่ผ่านมาพยายามคิดว่าทำไมมันไม่ต้องการทำงานในครั้งนี้เมื่อมันทำงาน 100 ครั้งก่อน :) ขอบคุณมาก!
sandalone

8
2 ปีบนยังคงช่วยชีวิต
Vrashabh Irde

30
เฮ้ ฉันได้เพิ่มสิ่งนี้ลงในรายการของฉันแล้ว อย่างไรก็ตามมันยังคงให้ ClassCastException แก่ฉัน
Somu

13
มีปัญหาเดียวกันเมื่อนาทีที่แล้วบน Android N รายการถูกต้อง รีสตาร์ทอุปกรณ์ - ข้อยกเว้นหายไป แปลก ...
artkoenig

3
@Somu clean cache และปิดการเรียกใช้ทันทีสร้างโครงการใหม่คำนี้สำหรับฉันฉันคิดว่านี่เป็นข้อบกพร่องของการเรียกใช้ทันที
LenaYan

11

วิธีแก้ปัญหาสำหรับอุปกรณ์ Android รุ่นเก่าหรืออีมูเลเตอร์ คุณกำหนดแอปพลิเคชันในรายการ:

    <application 
           android:name=".MyApp"...
    </application>

แต่คุณยังคงมีปัญหานี้หรือไม่?

ลองปิดการใช้งานการทำงานทันที:

  1. ปิดใช้งานการเรียกใช้ทันที
  2. ทำความสะอาดและสร้างโครงการใหม่
  3. ลบแอพออกจากอุปกรณ์และติดตั้งอีกครั้งโดยไม่ต้องเรียกใช้ทันที
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.