I have a code that reads title and url from firebase database and works pretty well, but i need to upload url and title in Array or list .
Here is Main Activity.
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.app.Application;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.FirebaseApp;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class MainActivity extends AppCompatActivity {
public RecyclerView mRecyclerView2;
FirebaseDatabase mFirebaseDatabase2;
DatabaseReference mref2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseApp.initializeApp(this);
// getSupportActionBar().setTitle("Videos");
mRecyclerView2 = findViewById(R.id.video_recycler_view);
mRecyclerView2.setHasFixedSize(true);
mRecyclerView2.setLayoutManager(new LinearLayoutManager(this));
mFirebaseDatabase2 = FirebaseDatabase.getInstance();
mref2 = mFirebaseDatabase2.getReference("videos");
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<Model2> options =
new FirebaseRecyclerOptions.Builder<Model2>()
.setQuery(mref2,Model2.class)
.build();
FirebaseRecyclerAdapter<Model2,ViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<Model2, ViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull Model2 model) {
holder.setDetails2(getApplication(),model.getName(),model.getUrl());
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row,parent,false);
return new ViewHolder(view);
}
};
firebaseRecyclerAdapter.startListening();
mRecyclerView2.setAdapter(firebaseRecyclerAdapter);
}
}
This is my ViewHolder.Java class.
import android.app.Application;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.util.Log;
public class ViewHolder extends RecyclerView.ViewHolder {
SimpleExoPlayer exoPlayer;
PlayerView playerView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
}
public void setDetails2(final Application ctx, String name, final String url) {
TextView mTitleTv2 = itemView.findViewById(R.id.rTitleTv2);
playerView = itemView.findViewById(R.id.ep_video_view);
mTitleTv2.setText(name);
try {
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(ctx).build();
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
exoPlayer = (SimpleExoPlayer) ExoPlayerFactory.newSimpleInstance(ctx);
Uri video = Uri.parse(url);
DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("video");
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
MediaSource mediaSource = new ExtractorMediaSource(video, dataSourceFactory, extractorsFactory, null, null);
playerView.setPlayer(exoPlayer);
exoPlayer.prepare(mediaSource);
exoPlayer.setPlayWhenReady(false);
} catch (Exception e) {
Log.e("ViewHolder2", "exoplayer error" + e.toString());
}
}
}
THis is my Member.java/Model2 class,
class Model2 {
String name,url;
public Model2(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
If the videos are saved in firebase storage and we read videos metadata from firebase database , the app works pretty well, but i need to use Postgresql , and i will be using HTTP api for that, what changings i will have to make ? If anybody can provide an example of taking video metadata from array or a list, i think i can handle other work.
Thank you