Lớp ứng dụng toàn cầu tùy chỉnh phá vỡ với Android android.app.Ứng dụng có thể được truyền tới


141

Tôi có một lớp toàn cầu tùy chỉnh trông như thế này

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

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

Tôi muốn bảo tồn một chuỗi trong lớp này thông qua một chuỗi khác Activitytrong onCreatephương thức của nó .

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

Nó bị hỏng trên dòng được đánh dấu có lỗi: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

Tôi đã kiểm tra mã năm lần và tôi không thể tìm thấy lỗi ở bất cứ đâu. Ai đó có thể cho tôi biết lỗi ở đâu không?!

Cảm ơn

Câu trả lời:


470

Lỗi nói rằng loại đối tượng được trả về getApplicationandroid.app.Application. Một nguyên nhân có thể cho việc này là do bạn không xác định được ứng dụng trong tệp kê khai. Hãy chắc chắn rằng bảng kê khai của bạn bao gồm một cái gì đó trong dòng:

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

8
Ôi Chúa ơi, bạn nói đúng. Và tôi đã mất một giờ trước khi cố gắng tìm ra lý do tại sao nó không muốn làm việc lần này khi nó hoạt động 100 lần trước đó :). Cảm ơn rất nhiều!
cá cát

8
2 năm trôi qua, vẫn cứu được mạng sống
Vrashabh Irde

30
Chào. Tôi có thêm điều này vào bảng kê khai của tôi. Tuy nhiên, nó vẫn mang lại cho tôi một ClassCastException
Somu

13
Có vấn đề tương tự vài phút trước trên Android N, bảng kê khai đã chính xác. Khởi động lại thiết bị - ngoại lệ đã biến mất. Lạ thật ...
artkoenig

3
@Somu xóa bộ nhớ cache và đóng chạy ngay lập tức, xây dựng lại dự án, điều này đúng với tôi, tôi nghĩ rằng đây là một lỗi của chạy ngay lập tức.
LenaYan

11

Một giải pháp khác cho các thiết bị hoặc trình giả lập Android cũ hơn . Bạn đã xác định một ứng dụng trong tệp kê khai:

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

nhưng bạn vẫn có vấn đề này?

Cố gắng vô hiệu hóa chạy ngay lập tức:

  1. Vô hiệu hóa chạy ngay lập tức
  2. Làm sạch và xây dựng lại dự án
  3. Xóa ứng dụng khỏi thiết bị và cài đặt lại mà không cần chạy ngay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.