Открыть URL-адрес из Firebase с помощью RecyclerView - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь открыть веб-страницу после нажатия ссылки.

Сначала появляется экран со списком стран. Когда я нажимаю «Канада», я попадаю на страницу с подробной информацией о Канаде. Один абзац посвящен деятельности, которую можно сделать и увидеть в Канаде, под названием «Видеть и делать». Пользователи смогут добавлять действия "видеть / делать", которые затем отображаются в горизонтальном списке. Каждый элемент содержит ссылку на конкретную c страницу, предоставленную пользователем. Данные хранятся в Firebase. У меня проблемы с получением URL-адреса действия see / do из FireBase.

У меня есть модель SeeDo, которая выглядит так:

public class SeeDo {
public String title;
public String link;

public SeeDo() {
}

public String getTitle() {return title;}
public void setTitle(String title) {this.title = title;}
public String getLink() {return link;}
public void setLink(String link) {this.link = link;}

}

Пытаюсь вызвать ссылку в SeeDoAdapter, где также написано ViewHolder.

publi c class SeeDoAdapter extends RecyclerView.Adapter {

private Context mContext;
private DatabaseReference mDatabaseReference;
private ChildEventListener mChildEventListener;

private List<String> mSeeDoIds = new ArrayList<>();
private List<SeeDo> mSeeDoList = new ArrayList<>();

private RecyclerView list;

private TextView mSeeDoLink;


public SeeDoAdapter(){}

public SeeDoAdapter(final Context context, DatabaseReference ref) {
    mContext = context;
    mDatabaseReference = ref;

    // Create child event listener
    // [START child_event_listener_recycler]
    ChildEventListener childEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
            Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());

            // A new comment has been added, add it to the displayed list
            SeeDo seeDo = dataSnapshot.getValue(SeeDo.class);
            // [START_EXCLUDE]
            // Update RecyclerView
            mSeeDoIds.add(dataSnapshot.getKey());
            mSeeDoList.add(seeDo);
            notifyItemInserted(mSeeDoIds.size() - 1);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
            Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey());

            // A comment has changed, use the key to determine if we are displaying this
            // comment and if so displayed the changed comment.
            SeeDo newSeeDo = dataSnapshot.getValue(SeeDo.class);
            String seeDoKey = dataSnapshot.getKey();

            // [START_EXCLUDE]
            int seeDoIndex = mSeeDoIds.indexOf(seeDoKey);
            if (seeDoIndex > -1) {
                // Replace with the new data
                mSeeDoList.set(seeDoIndex, newSeeDo);

                // Update the RecyclerView
                notifyItemChanged(seeDoIndex);
            } else {
                Log.w(TAG, "onChildChanged:unknown_child:" + seeDoKey);
            }
            // [END_EXCLUDE]
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey());

            // A comment has changed, use the key to determine if we are displaying this
            // comment and if so remove it.
            String seeDoKey = dataSnapshot.getKey();

            // [START_EXCLUDE]
            int seeDoIndex = mSeeDoIds.indexOf(seeDoKey);
            if (seeDoIndex > -1) {
                // Remove data from the list
                mSeeDoIds.remove(seeDoIndex);
                mSeeDoList.remove(seeDoIndex);

                // Update the RecyclerView
                notifyItemRemoved(seeDoIndex);
            } else {
                Log.w(TAG, "onChildRemoved:unknown_child:" + seeDoKey);
            }
            // [END_EXCLUDE]
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
            Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey());

            // A comment has changed position, use the key to determine if we are
            // displaying this comment and if so move it.
            SeeDo movedSeeDo = dataSnapshot.getValue(SeeDo.class);
            String seeDoKey = dataSnapshot.getKey();

            // ...
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w(TAG, "postComments:onCancelled", databaseError.toException());
            Toast.makeText(mContext, "Failed to load comments.",
                    Toast.LENGTH_SHORT).show();
        }
    };
    ref.addChildEventListener(childEventListener);
    // [END child_event_listener_recycler]

    // Store reference to listener so it can be removed on app stop
    mChildEventListener = childEventListener;
}

@Override
public SeeDoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    View view = inflater.inflate(R.layout.item_seedo, parent, false);
    mSeeDoLink=view.findViewById(R.id.ci_seeDo_linkTextView);
    return new SeeDoViewHolder(view);
}

@Override
public void onBindViewHolder(final SeeDoViewHolder holder, int position) {

    final SeeDo seeDo = mSeeDoList.get(position);
    holder.titleView.setText(seeDo.title);
    holder.linkTextView.setText(seeDo.link_text);
    holder.descriptionView.setText(seeDo.description);

    mSeeDoLink.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            SeeDo seeDo = new SeeDo();
            intent.setData(Uri.parse(seeDo.link));
            mContext.startActivity(intent);
        }
    });
}

При нажатии ссылку на моем экране, я получаю эту ошибку:

        at com.cycleplanet.cycleplanet.Adapter.SeeDoAdapter$2.onClick(SeeDoAdapter.java:182)

Это строка кода в конце SeeDoAdapter.

                intent.setData(Uri.parse(seeDo.link));

Я попытался поместить оператор if в перед намерением, и кажется, что URL-адрес не извлекается. Но я не знаю, как правильно его получить, может ли кто-нибудь помочь мне найти решение? Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...