0

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)

0 Answers0