Сопутствующие объекты - Android хочет зарегистрировать их как действия (?)

У меня есть активность

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

Об этом заявлено в Манифесте следующим образом:

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

Когда пытаюсь запустить, получаю:

Меня беспокоит такая строчка:

Не удалось найти явный класс активности {com.example.andrzejzuzak.visiondummyapp / com.example.andrzejzuzak.visiondummyapp.DummyActivity $ Companion

Означает ли это, что мне нужно где-то зарегистрировать объект Companion?

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)
    }
}
относится к
    <activity android:name=".DummyActivity"/>
</application>
, а не к _3_. Фактически, это даже предупреждение:


person AndrzejZ    schedule 01.04.2017    source источник
comment
Несвязанный: Activity уже имеет Intent(context, DummyActivity::class.java) метод, возможно, вы захотите переименовать свой фабричный метод во что-нибудь простое и понятное на первый взгляд, например _2_. (Это не обратный вызов, он не начинается с _3_.) Сохрани свое будущее «я» на некоторое время.   -  person Maciej Ciemięga    schedule 01.04.2017
comment
Что такое @JvmStatic в этом случае? И спасибо за этот ответ!   -  person Eugen Pechanec    schedule 01.04.2017


Ответы (1)


Результирующий тип этого javaClass вызова - Class<Dummy.Companion>, а не Class<Dummy>. Пожалуйста, используйте более четкий ::class.java синтаксис, чтобы избежать путаницы.

Предупреждение

Вместо этого вы должны использовать DummyActivity::class.java,

Вместо этого вы должны использовать DummyActivity.javaClass

person Yoav Sternberg    schedule 01.04.2017
comment
Просто скопировал код вопроса. Короче говоря, _1_ указывает компилятору сделать этот метод статическим на платформе JVM. - person Adam Hughes; 06.04.2017
comment
если используется @jvmstatic, почему он внутри сопутствующего объекта? Разве приведенный выше код не говорит, что @jvmStatic является статическим методом внутреннего сопутствующего объекта Dummy, а не статическим методом _2_ - person Yoav Sternberg; 07.04.2017
comment
Вызвано: android.content.ActivityNotFoundException: невозможно найти явный класс активности> {com.example.andrzejzuzak.visiondummyapp / com.example.andrzejzuzak.visiondummyapp.DummyActivity $ Companion}; Вы указали это действие в своем AndroidManifest.xml? в android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1794) в android.app.Instrumentation.execStartActivity (Instrumentation.java:1512) в android.app.Activity.startActivityForResult (Activity.java:3930) в android.support. v4.app.BaseFragmentActivityJB.startActivityForResult (BaseFragmentActivityJB.java:50) в android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:79) в android.app.Activity.startActivityForResult (ActivityForResult) в android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:859) в android.app.Activity.startActivity (Activity.java:4213) в android.app.Activity.startActivity (Activity.java:4181) в com.example.andrzejzuzak.visiondummyapp.MainActivity.onActivityResult (MainActivity.kt: 85) в android.app.Activity.dispatchActivityResult (Activity.java:6456) в android.app.ActivityThread.deliverResults (ActivityThread.java:3695) в android.app.ActivityThread.handleSendResult (ActivityThread.java:3742) в android.app. ActivityThread.-wrap16 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1393) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop ( Looper.java:148) в android.app.ActivityThread.main (ActivityThread.java:5417) в java.lang.reflect.Method.invoke (собственный метод) - person Ryhan; 16.09.2017