Я пытаюсь открыть веб-страницу после нажатия ссылки.
Сначала появляется экран со списком стран. Когда я нажимаю «Канада», я попадаю на страницу с подробной информацией о Канаде. Один абзац посвящен деятельности, которую можно сделать и увидеть в Канаде, под названием «Видеть и делать». Пользователи смогут добавлять действия "видеть / делать", которые затем отображаются в горизонтальном списке. Каждый элемент содержит ссылку на конкретную 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-адрес не извлекается. Но я не знаю, как правильно его получить, может ли кто-нибудь помочь мне найти решение? Заранее спасибо!