2017-04-01 29 views
5

ben aşağıdaki gibi Manifest deklare edilmediğiCompanion nesneleri - Android faaliyetleri olarak bunları kaydetmek istiyor

class DummyActivity : Activity() { 

    companion object { 
     @JvmStatic fun onNewIntent(context: Context): Intent { 
      val intent = Intent(context, DummyActivity.javaClass) 
      return intent 
     } 
    } 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_main) 
    } 
} 

bir Etkinlik:

<activity android:name=".DummyActivity"/> 
</application> 

bunu başlatmaya çalıştığınızda (?) Ben olsun:

neden Olduğu: android.content.ActivityNotFoundException: açık aktivite sınıfı bulunamıyor> {com.example.andrzejzuzak.visiondummyapp/com.e xample.andrzejzuzak.visiondummyapp.DummyActivity $ Companion}; AndroidManifest.xml dosyasında bu etkinliği bildirdiniz mi? android.app.Activity.startActivityForResult de android.app.Instrumentation.execStartActivity (Instrumentation.java:1512) de android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1794) (Activity.java:3930) de de android.support.v4.app.BaseFragmentActivityJB.startActivityForResult (BaseFragmentActivityJB.java:50) android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:79) at android.app.Activity.startActivityForResult (Etkinlik. java: 3890) , android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:859) android.app.Activity.startActivity (Activity.java:4213) at android.app.Activity.startActivity (Activity.java:4181) com.example.andrzejzuzak.visiondummyapp.MainActivity.onActivityResult (MainActivity.kt: 85)) android.app.ActivityThread.handleSendResult (ActivityThread.java:3742 de android.app.ActivityThread.deliverResults (ActivityThread.java:3695) de android.app.Activity.dispatchActivityResult (Activity.java:6456) de ) android.app.ActivityThread.-wrap16 (ActivityThread.java) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1393) android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:148) at android.app.ActivityThread.main (ActivityThread.java:5417) java at beni rahatsız ne .lang.reflect.Method.invoke (Yerli Metodu)

bu çizgidir: açık aktivite sınıfı {com.example.andrzejzuzak.visiondummyapp/com.example bulunamıyor

. andrzejzuzak.visiondummyapp.DummyActivity $ Tamamlayıcı

Bu aslında Companion nesnesini bir yere kaydetmem gerektiği anlamına mı geliyor?

+1

kullanmalıdır (bağlamını, DummyActivity :: class.java)' yerine –

+0

İlgisiz: Etkinlik zaten 'onNewIntent' yöntemi vardır, belki de fabrika yönteminizi 'createIntent 'gibi ilk bakışta basit ve anlaşılır bir şeye yeniden adlandırmak isteyebilirsiniz. (Bu bir geri çağırma değil, '' 'ile başlamıyor.) Geleceğiniz zamanınızı bir süreliğine koruyun. –

cevap

6

DummyActivity.javaClass, DummyActivity.Companion anlamına gelir ve DummyActivity'a değil.

bu javaClass çağrısının çıkan tip Class<Dummy.Companion> değil Class<Dummy> geçerli: Aslında, hatta bir uyarıdır.Karışıklığı önlemek için lütfen daha temiz ::class.java sözdizimini kullanın.

Warning

Bunun yerine, sen `Niyet kullanmalısınız DummyActivity::class.java,

+0

Bu durumda @JvmStatic nedir? Ve bu cevap için teşekkür ederim! –

+0

Sorunun kodunu kopyaladım. Kısacası, 'jvmStatic' derleyiciye JVM platformunda bu yöntemi statik yapmasını söyler. –

+0

, jvmstatic kullanılıyorsa, neden eşlik eden nesnenin içinde, yukarıdaki kod değil, onNewIntent() ifadesi, Dummy'nin – Ryan