Basically, I'm trying to list all the uploaded documents from Firebase's real-time database using the Recycler View. I have successfully listed the documents but what I want to achieve is to download the documents by clicking the document listed in the RecyclerView, but the line throws an error.
intent.setData(Uri.parse(urls.get(position)));
I'm a beginner at coding, so please help me with the error.
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
RecyclerView recyclerView;
Context context;
ArrayList<String>items=new ArrayList<>();
ArrayList<String>urls = new ArrayList<>();
public void update(String name,String url){
items.add(name);
urls.add(url);
notifyDataSetChanged();
}
public MyAdapter(RecyclerView recyclerView,Context context, ArrayList<String> items, ArrayList<String> urls){
this.recyclerView=recyclerView;
this.context=context;
this.items=items;
this.urls=urls;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.item,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder( ViewHolder holder, int position) {
holder.nameOfFile.setText(items.get(position));
}
@Override
public int getItemCount() {
return items.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView nameOfFile;
public ViewHolder(View itemView) {
super(itemView);
nameOfFile=itemView.findViewById(R.id.nameOfFile);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position=recyclerView.getChildLayoutPosition(view);
Intent intent=new Intent();
intent.setType(Intent.ACTION_VIEW);
**intent.setData(Uri.parse(urls.get(position)));**
context.startActivity(intent);
}
});
}
}
}
Here is all the operation behind the java activity
public class MyRecyclerViewActivity extends AppCompatActivity {
RecyclerView recyclerView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_recycler_view);
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String fileName=dataSnapshot.getKey();
String url=dataSnapshot.child("AI_Unit_1").getValue(String.class);
((MyAdapter)recyclerView.getAdapter()).update(fileName,url);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError error) {
}
});
recyclerView =findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(MyRecyclerViewActivity.this));
MyAdapter myAdapter=new MyAdapter(recyclerView,MyRecyclerViewActivity.this, new ArrayList<String>(), new ArrayList<>());
recyclerView.setAdapter(myAdapter);
}
}
HERE IS THE LOGCAT ---
java.lang.NullPointerException: uriString
at android.net.Uri$StringUri.<init>(Uri.java:496)
at android.net.Uri$StringUri.<init>(Uri.java:486)
at android.net.Uri.parse(Uri.java:458)
at com.example.ngitstudentportal.MyAdapter$ViewHolder$1.onClick(MyAdapter.java:63)
at android.view.View.performClick(View.java:7520)
at android.view.View.performClickInternal(View.java:7489)
at android.view.View.access$3600(View.java:826)
at android.view.View$PerformClick.run(View.java:28555)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8030)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)