2017-02-18 8 views
0

У меня есть это приложение:Как реализовать интерфейс в классе приложения?

public class App extends Application { 

    private AppInterface appInterface; 

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

     appInterface = (AppInterface) this; 
    } 

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

Используя этот интерфейс:

public interface AppInterface { 
    void result(); 
} 

И я пытаюсь вызвать некоторый метод внутри приложения и получить результат от интерфейса:

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(); 
    } 
} 

Но я я получаю эту ошибку:

E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.something, PID: 13803 java.lang.RuntimeException: невозможно создать приложение com.something.App: java.lang.ClassCastException: com.something.App не может быть запущен to com.something.AppInterface на android.app.ActivityThread.handleBindApplication (ActivityThread.java:5406) ​​ на android.app.ActivityThread.-wrap2 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread .java: 1545) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java : 6119) at java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) Вызванный: java.lang.ClassCastException: com.msd.test.App не может быть приведен к com.msd.test.AppInterface

Что я делаю неправильно?

+0

Во-первых, вызов 'getApplicationContext()' 'внутри Application' бессмысленно , Просто используйте 'this'. Во-вторых, 'App' * содержит * экземпляр' AppInterface'. 'App' сам по себе не является экземпляром' AppInterface'. – CommonsWare

+0

Хорошо, замените getApplicationContext() на «это», ясно, но как его исправить? Можешь ли ты показать мне? – Michalsx

ответ

2

Try интерфейс следующим образом:

В 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(); 
    } 
} 

В 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

Большое спасибо, теперь я вижу свою ошибку :) – Michalsx

+0

pls отметьте мой ответ как правильно :) –

+0

Эй @Michalsx вы должны отметить этот ответ правильно, так что другие могут также получить ответ, если они также получат эту проблему .. – NehaK