свойство songinl lateinit не было инициализировано, хотя я сделал - PullRequest
0 голосов
/ 02 октября 2018

У меня есть два действия, первое из которых имеет общедоступную переменную String, называемую songurl, а кнопка ведет ко второму действию, а во втором задании медиаплеер получает URL-адрес от переменной String, которая находится в первом действии, а затем начинает воспроизведение, но проблема заключается в том, что медиаплеер нене работает, и я получил ошибку

здесь MainActivity1.kt или .java в качестве вашего языка: -

  lateinit var songurl :String
class MainActivity1 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    songurl = "https//...... My URL"

        var btnstart_MainActivity2:Button = findViewById(R.id.btn)
        btnstart_MainActivity2.setOnClickListener {
            startActivity(Intent(this,Main2Activity::class.java))
        }

    }
}

здесь MainActivity2: -

class Main2Activity : AppCompatActivity() {
    lateinit var mediaplayer: MediaPlayer
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            mediaplayer= MediaPlayer()
            mediaplayer.setDataSource(songurl)
            mediaplayer.prepare()
            mediaplayer.start()
        }
    }

и вот ошибка
lateinit property songurl has not been initialized

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы должны отправить свой songUrl в Android Intent Extras.Причина, по которой вы получаете ошибку, состоит в том, что она не определена в действии2, которое вы определили в действии 1.

для отправки намерения дополнительно

var intent = Intent(this,Main2Activity::class.java)
intent.putExtra("songurl", songurl)

чтобы получить дополнительное в другой деятельности

if(getIntent().hasExtra("songurl"){
 var songurl = getIntent().getStringExtra("songurl")
}
0 голосов
/ 02 октября 2018

Ваша проблема в том, что ваш songurl присутствует только в вашем первом действии.В действии 2 для него нет значения и даже присвоения.

Подумайте о передаче его в качестве параметра связки намерения:

Activity1:
Bundle bundle= new Bundle();
bundle.putString("key", songurl);

Intent i = new Intent(Activity1.this,Activity2.class);
i.putExtras(bundle);
startActivity(i);

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

    Bundle p = getIntent().getExtras();
    String songurl = p.getString("key");

}

Примеры приведены в java.

...