2017-02-18 2 views
0

Ich habe diese Anwendung:Wie implementiert man die Schnittstelle in die Anwendungsklasse?

public class App extends Application { 

    private AppInterface appInterface; 

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

     appInterface = (AppInterface) this; 
    } 

    public void something() { 
     appInterface.result(); 
    } 
} 

diese Schnittstelle:

public interface AppInterface { 
    void result(); 
} 

Und ich versuche eine Methode innerhalb App aufrufen und von der Schnittstelle Ergebnis:

public class MainActivity extends AppCompatActivity implements AppInterface { 

    @Override 
    public void result() { 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final App app = (App) getApplication(); 
     app.something(); 
    } 
} 

Aber ich bekomme diesen Fehler:

E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.something, PID: 13803 java.lang.RuntimeException: kann keine Anwendung com.something.App erstellen: java.lang.ClassCastException: com.something.App kann nicht umgewandelt werden zu com.something.AppInterface bei android.app.ActivityThread.handleBindApplication (ActivityThread.java:5406) ​​ bei android.app.ActivityThread.-wrap2 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread .java: 1545) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java : 6119) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) verursacht durch: java.lang.ClassCastException: com.msd.test.App nicht com.msd.test.AppInterface gegossen werden kann

Was mache ich falsch?

+0

Zuerst ruft 'getApplicationContext()' 'innen ein Application' sinnlos . Benutze einfach 'this'. Zweitens enthält "App" * eine Instanz von "AppInterface". App selbst ist keine AppInterface-Instanz. – CommonsWare

+0

Ok, ersetzen Sie getApplicationContext() durch "das" ist klar, aber wie man es beheben? Kannst du mir zeigen? – Michalsx

Antwort

2

Try-Schnittstelle, wie folgend:

In App.java:

public class App extends Application { 

     private AppInterface appInterface; 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
     } 

     public void something(AppInterface appInterface) { 
      this.appInterface = appInterface; 


//save this for future use, and whenver you want to pass data , use this method like- 
     appInterface.result(); 
    } 
} 

In MainActivity.java

public class MainActivity extends AppCompatActivity implements AppInterface { 

    @Override 
    public void result() { 
     Log.d("result", "called"); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final App app = (App) getApplication(); 
     // pass you reference from here 
     app.something(MainActivity.this); 
    } 
} 
+0

Vielen Dank, jetzt sehe ich meinen Fehler :) – Michalsx

+0

Pls markieren meine Antwort als richtig :) –

+0

Hey @Michalsx sollten Sie diese Antwort richtig markieren, So können andere auch ihre Antwort bekommen, wenn sie auch dieses Problem bekommen .. – NehaK

Verwandte Themen