Как правильно сохранить состояние просмотра игрока? - PullRequest
0 голосов
/ 18 февраля 2019

Это весь код PlayerActivity

package com.sherdle.universal;

import android.arch.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProvider;
import android.arch.lifecycle.ViewModelProviders;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.JsonReader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.arges.sepan.argmusicplayer.Enums.AudioType;
import com.arges.sepan.argmusicplayer.IndependentClasses.ArgAudio;
import com.arges.sepan.argmusicplayer.PlayerViews.ArgPlayerFullScreenView;
import com.arges.sepan.argmusicplayer.PlayerViews.ArgPlayerLargeView;
import com.arges.sepan.argmusicplayer.PlayerViews.ArgPlayerSmallView;
import com.example.jean.jcplayer.model.JcAudio;
import com.example.jean.jcplayer.view.JcPlayerView;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;

public class Argplayer2Activity extends AppCompatActivity implements argplayer3.OnFragmentInteractionListener {

    protected JcPlayerView jcplayerView;
    public HashMap<String, String> podcasts;

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.argplayer2);
        podcasts = new HashMap<>();


        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    String user = getString(R.string.podcast_user);
                    String server = getString(R.string.podcast_server);
                    URL proxy = new URL("https://xxxxxxxxxxx.com/android/proxy.php?user="+user+"&server="+server);
                    HttpsURLConnection connection = (HttpsURLConnection) proxy.openConnection();
                    if(connection.getResponseCode() == 200) {
                        InputStream body = connection.getInputStream();
                        InputStreamReader bodyReader = new InputStreamReader(body, "UTF-8");
                        JsonReader jsonReader = new JsonReader(bodyReader);
                        jsonReader.beginObject();
                        while(jsonReader.hasNext()) {
                            String key = jsonReader.nextName();
                            String value = jsonReader.nextString();
                            podcasts.put(key, value);
                        }
                        jsonReader.close();
                        connection.disconnect();

                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {

                                jcplayerView = (JcPlayerView) findViewById(R.id.jcplayer);

                                ListView podcastlistView = (ListView) findViewById(R.id.podcastListView);

                                PodcastAdapter podcastAdapter = new PodcastAdapter();
                                podcastlistView.setAdapter(podcastAdapter);

                            }
                        });

                    }
                } catch (java.io.IOException e) {
                    e.printStackTrace();
                }
            }
        });


    }

    public class MyViewModel extends ViewModel {

        String okey;

        public String doszka() {
            loadPodcasts();
            return okey;
        }


        void loadPodcasts() {
            okey = "oki";
        }

        void setOkey(String x) {
            okey = x;
        }

    }

    @Override
    public void onFragmentInteraction(Uri uri) {

    }


    public class PodcastAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return podcasts.size();
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            view = getLayoutInflater().inflate(R.layout.podcast_layout, null);

            TextView title = (TextView) view.findViewById(R.id.podcastTitle);
            ImageView playButton = (ImageView) view.findViewById(R.id.playButtonplay);

            playButton.setOnClickListener(new PlayOnClickEventListener(i));

            title.setText((String) podcasts.keySet().toArray()[i]);

            return view;
        }

        public class PlayOnClickEventListener implements View.OnClickListener {
            int position;

            public PlayOnClickEventListener(int position) {
                this.position = position;
            }

            @Override
            public void onClick(View view) {
                jcplayerView.kill();
                ArrayList<JcAudio> jcAudios = new ArrayList<>();
                jcAudios.add(JcAudio.createFromURL(
                        (String) podcasts.keySet().toArray()[position],
                        (String) podcasts.values().toArray()[position]
                ));
                jcplayerView.initPlaylist(jcAudios, null);
                jcplayerView.continueAudio();

            }

        }

    }

}

А вопросы ...

Как правильно сохранить состояние игрока?

Я имею в виду... это примерно jcplayerView.

из

jcplayerView = (JcPlayerView) findViewById(R.id.jcplayer);
ListView podcastlistView = (ListView) findViewById(R.id.podcastListView);
PodcastAdapter podcastAdapter = new PodcastAdapter();
podcastlistView.setAdapter(podcastAdapter);

Это берет это из jcplayerView = (JcPlayerView) findViewById(R.id.jcplayer);

Потому что пока проблема в том, что представьте себе следующее:

Вы идете в приложение, идете в этом задании, есть плеер.

Вы выбираете песню 1, плеер запускается, кнопка воспроизведения становится кнопкой паузы.Вы можете прочитать название песни и т.д. ...

Но вы избегаете приложения.Просто выйдите или перейдите в другое приложение.

Песня играет все время.

Но когда вы вернетесь, это как в первый раз.

Нет названия песни, нет кнопки паузы, только кнопка воспроизведения.

И когда вы запускаете песню, нажимая кнопку воспроизведения на одной из песен, она воспроизводит в 2 раза ту же песню ...


Я думаю, что речь идет о правильном сохранении jcplayerView вида / объекта ...

Но на самом деле, ребята, я не знаю, что мне делать,

потому что в основном:

  • Я не знаю, что использовать

  • Я не знаю, jcplayerView изменяется в activity's onCreate и PlayOnClickEventListener, которые я создал

  • И каким-то образом он использует PodcastAdapter

Мне трудно понять и сформировать этона мой взгляд: /.

Плюс есть методы, которые я знаю, многие из них + методы, которые я не знаю.

Я действительно не знаю, что я должен использовать /сделать для этой конкретной проблемы.

Например ViewModel, или просто onSaveInstanceState ...

Как вы можете видеть, я пытался создать какой-то public class MyViewModel extends ViewModel {, но я понятия не имею, как его склеить, заставить это работать, каксоздать это.И я не знаю, является ли это правильным способом сделать это.

Я даже не знаю, правильно ли я делаю этот класс в классе деятельности.

Не могу 'Ответ на этот вопрос не найден в документации.

Я описал проблему, думаю, вы должны меня понять + вы получили код.

Пожалуйста, помогите мне с этим :) <3</p>

...