2014-05-08 12 views
22

Sto cercando di cambiare un LinearLayout da un'altra classe, ma quando ho eseguito questo codice:android.app.Application non può essere lanciato a android.app.Activity

public class IRC extends PircBot { 

ArrayList<String> channels; 
ArrayList<Integer> userCount; 
ArrayList<String> topics; 

LinearLayout channelLayout; 
Context context; 

public IRC(Context ctx) { 
    this.setName("xxxx"); 
    channels = new ArrayList<String>(); 
    userCount = new ArrayList<Integer>(); 
    topics = new ArrayList<String>(); 

    context = ctx; 

    channelLayout = (LinearLayout) ((Activity) context).findViewById(R.id.channels); 
} 

ho un ClassCastException

contesto è l'attività principale che si estende Activity passata con getApplicationContext();

Logcat

05-08 17:53:55.102 3736-3799/g.d.allinonechat E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-5357 
java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity 
     at g.d.xxx.IRC.<init>(IRC.java:34) 
     at g.d.xxx.MainActivity$1.run(MainActivity.java:49) 
     at java.lang.Thread.run(Thread.java:856) 
+0

Rimuovi il try catch e Pubblica il tuo logcat .. – Lal

+0

Non dovresti aver bisogno di '(Activity)' dato che stai usando il 'Activity Context'. Insieme al logcat, potresti voler pubblicare come stai passando il 'Contesto'. – codeMagic

+0

pubblica il tuo stack – fookwood

risposta

62

Si passa l'applicazione Context non il Activity Context con

getApplicationContext(); 

Ovunque si passa passare this o ActivityName.this invece.

Dal momento che si sta cercando di lanciare il Context si passa (applicazione non Activity come si pensava) a un Activity con

(Activity) 

si ottiene questa eccezione perché non è possibile lanciare l'applicazione per Activity in quanto applicazione non una sottoclasse di Activity.

+2

Grazie, questo ha risolto il mio problema – DomeWTF

+0

Questa è una risposta? è lo stesso che registra ma con molte linee "ClassCastException: android.app.Application non può essere lanciato su android.app.Activity" Una soluzione per me è usare "this" da un'attività – vLopez

+0

@vLopez I don ' t capisci la tua domanda Ma sì, "questo" funzionerà in un "Attività" ed è per questo che ho suggerito di passare, dal momento che l'OP non era in una "Attività" – codeMagic

Problemi correlati