2017-02-18 40 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:致命例外:主 進程:com.something,PID:13803 java.lang.RuntimeException:無法創建應用程序com.something.App:java.lang.ClassCastException:com.something.App無法投射到com.omething.AppInterface at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5406) at android.app.ActivityThread.-wrap2(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread .java:1545) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java :6119) at java.lang.reflect.Method.invoke(Native Method) 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

好吧,用「this」替換getApplicationContext()是明確的,但是如何解決?能給我看看麼? – Michalsx

回答

2

嘗試接口如下:

在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

請標記我的答案爲正確:) –

+0

嘿@Michalsx你應該標記這個答案的權利,所以其他人也可以得到他們的答案,如果他們也得到這個問題。 – NehaK

相關問題