Firebase Cloud Storage Notes
useful videos/blogs :
https://youtu.be/lPf065fqmF4
We have 3 main methods used during Insertion of files :
putBytes( ) , putStream( ) , putFile( )
putStream() is the recommended method to use for any type of file insertion.
putBytes( ) / getBytes( ) first reads / loads all the bytes into ram before doing any operation , hence it takes Ram , due to this it is not used for large file insertion or fetching.
------------------------------------------------------------------------------------------------------
Firebase Important Points :
Firebase Storage is used to store Documents , Videos & Photos
(Data is stored on Google Cloud Platform)
You cannot store data directly to the root folder , you have to create folders and then insert data inside them.
--------------------------------------------------------------------------------------------------
useful video : https://youtu.be/lY3xE25yGCE
INSERT SIMPLE TEXT FILE INTO STORAGE.
package com.deepesh.firebaselearningapp;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
public class MainActivity extends AppCompatActivity{
private static final String TAG = "TAG";
TextView tetxview1;
EditText userinput_editText;
// Get the reference of your Storage Location.
StorageReference storage_ref;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialises all fields
init();
}
private void init(){
tetxview1=findViewById(R.id.tetxview1);
userinput_editText=findViewById(R.id.userinput_editText);
// Gets reference to the given Folder/Directory inside the Storage.
// Creates one if not present.
// if nothing passed , it gives reference to root folder of the storage.
storage_ref = FirebaseStorage.getInstance().getReference("docs/");
}
// user clicks button
public void InsertData(View view) {
String userinput = userinput_editText.getText().toString();
// gets reference of the given path
// Creates one if not present.
StorageReference child_ref = storage_ref.child("myfiles/my_text.txt");
// write inside the document file.
UploadTask uploadTask = child_ref.putBytes(userinput.getBytes());
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
tetxview1.setText("Sucess");
}
});
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
tetxview1.setText("Failure due to : " + e.getMessage());
}
});
}
// user clicks button
public void ReadData(View view) {
}
// user clicks button
public void ShowData(View view) {
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/userinput_editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="76dp"
android:ems="10"
android:hint="Enter Anything..."
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tetxview1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="217dp"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Ready to code " />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:layout_marginBottom="94dp"
android:onClick="InsertData"
android:text="Insert"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="27dp"
android:onClick="ReadData"
android:text="Read"
app:layout_constraintBaseline_toBaselineOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="ShowData"
android:text="Show"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/button3" />
</androidx.constraintlayout.widget.ConstraintLayout>
------------------------------------------------------------------------------------------------------------
All the Data operation methods like putBytes , PutStream() operate on the Background thread.
putStream() is the recommended method to use for any type of file insertion.
INSERT SIMPLE IMAGE FILE INTO STORAGE.
USING putBytes( )
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/userinput_editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="76dp"
android:ems="10"
android:hint="Enter Anything..."
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tetxview1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="217dp"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Ready to code " />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:layout_marginBottom="94dp"
android:onClick="InsertData"
android:text="Insert"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="27dp"
android:onClick="ReadData"
android:text="Read"
app:layout_constraintBaseline_toBaselineOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="ShowData"
android:text="Show"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/button3" />
</androidx.constraintlayout.widget.ConstraintLayout>
package com.deepesh.firebaselearningapp;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity{
private static final String TAG = "TAG";
TextView textview1;
EditText userinput_editText;
// Get the reference of your Storage Location.
StorageReference storage_ref;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialises all fields
init();
}
private void init(){
textview1=findViewById(R.id.tetxview1);
userinput_editText=findViewById(R.id.userinput_editText);
// Gets reference to the given Folder/Directory inside the Storage.
// Creates one if not present.
// if nothing passed , it gives reference to root folder of the storage.
storage_ref = FirebaseStorage.getInstance().getReference("docs/");
}
// user clicks button
public void InsertData(View view) {
Bitmap bitmap = ReadImage();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (bitmap==null){
Log.d(TAG, "InsertData: BITMAP IS NULL !");
return;
}else{
bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);
}
// Disadvantage of using putBytes() is that
// we need to pass it as Array of bytes.
// putBytes() read the entire file byte by byte.
// Hence it is not viable for large file uploads.
// For large file upload we use putStream().
UploadTask uploadTask = storage_ref.child("images/image1.jpg")
.putBytes(baos.toByteArray());
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
textview1.setText("Sucess");
}
});
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
textview1.setText("Failure");
}
});
}
// will read the image
private Bitmap ReadImage(){
InputStream inputStream = null;
try {
// pass the file name you want to upload.
inputStream= getAssets().open("image1.jpg");
BitmapDrawable bitmapDrawable = (BitmapDrawable) Drawable.createFromStream(inputStream,null);
return bitmapDrawable.getBitmap();
} catch (IOException e) {
Log.d(TAG, "ReadImage: ERROR : "+e.getMessage());
}
if (inputStream!=null){
try {
inputStream.close();
}catch (Exception e){
Log.d(TAG, "ReadImage: ERROR : " + e.getMessage());
}
}
return null;
}
// user clicks button
public void ReadData(View view) {
}
// user clicks button
public void ShowData(View view) {
}
}
------------------------------------------------------------------------------------------------------------
putStream() is the recommended method to use for any type of file insertion.
INSERT SIMPLE IMAGE FILE INTO STORAGE.
USING putStream( )
package com.deepesh.firebaselearningapp;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity{
private static final String TAG = "TAG";
TextView textview1;
EditText userinput_editText;
// Get the reference of your Storage Location.
StorageReference storage_ref;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialises all fields
init();
}
private void init(){
textview1=findViewById(R.id.tetxview1);
userinput_editText=findViewById(R.id.userinput_editText);
// Gets reference to the given Folder/Directory inside the Storage.
// Creates one if not present.
// if nothing passed , it gives reference to root folder of the storage.
storage_ref = FirebaseStorage.getInstance().getReference("docs/");
}
// user clicks button
public void InsertData(View view) {
InputStream inputstream = null;
try {
inputstream= new FileInputStream(new File(getFilesDir(),"image1.jpg"));
} catch (FileNotFoundException e) {
Log.d(TAG, "InsertData: ERROR :"+e.getMessage());
}
UploadTask uploadTask = storage_ref.child("images/image1.jpg").putStream(inputstream);
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
textview1.setText("Sucess");
}
});
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
textview1.setText("Failure");
}
});
}
// user clicks button
public void ReadData(View view) {
}
// user clicks button
public void ShowData(View view) {
}
}
(We fetch the file from inside the file directory of the device)
(UI as Above)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/userinput_editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="76dp"
android:ems="10"
android:hint="Enter Anything..."
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tetxview1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="217dp"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Ready to code " />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:layout_marginBottom="94dp"
android:onClick="InsertData"
android:text="Insert"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="27dp"
android:onClick="ReadData"
android:text="Read"
app:layout_constraintBaseline_toBaselineOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="ShowData"
android:text="Show"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/button3" />
</androidx.constraintlayout.widget.ConstraintLayout>
------------------------------------------------------------------------------------------------------------
useful video & blogs :
https://youtu.be/RwwVim8ycyg
2 main Methods used to Read data from firebase are getBytes & getFile().
getBytes( ) first reads / loads all the bytes into ram before doing any operation , hence it takes Ram , due to this it is not used for large file insertion or fetching.
Use getFile( ) instead.
DOWNLOAD , READ & SAVE FILES FROM FIREBASE
Using getBytes( )
(we fetch these existing files from firebase storage database)
Just Change the File path to download different files You can download pdf's , videos , audio etc files doing the same method.
package com.deepesh.firebaselearningapp;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import java.io.File;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity{
private static final String TAG = "TAG";
TextView textview1;
ImageView imageView;
// Get the reference of your Storage Location.
StorageReference storage_ref;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialises all fields
init();
}
private void init(){
textview1=findViewById(R.id.textView1);
imageView=findViewById(R.id.imageView1);
storage_ref = FirebaseStorage.getInstance().getReference("docs/");
}
// user clicks button
public void InsertData(View view) {
}
// user clicks button
public void ReadData(View view) {
// Here we know the size of our image.
long ONE_MEGABYTE = 1024*1024;
Task<byte[]> task = storage_ref.child("images/image1.jpg").getBytes(ONE_MEGABYTE);
task.addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
imageView.setImageBitmap(BitmapFactory.decodeByteArray(bytes,0,bytes.length));
Toast.makeText(MainActivity.this, "File Downloaded & Set", Toast.LENGTH_SHORT).show();
// CODE TO SAVE FILE ON EXTERNAL STORAGE
// Dont forget to add permissions inside manifest
// Below Code to save the file may not work
// Write your own latest methods below
final File outputfile = new File(Environment.getExternalStorageDirectory(),"image1.jpg");
try {
FileOutputStream fos = new FileOutputStream(outputfile);
fos.write(bytes);
fos.close();
// Shows absolute path.
Log.d(TAG, "FILE SAVED AT : " + outputfile);
}catch (Exception e){
Log.d(TAG, "FAILURE DUE TO : " + e.getMessage());
}
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: FAILURE DUE TO : " + e.getMessage());
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:onClick="InsertData"
android:text="Insert"
app:layout_constraintBottom_toBottomOf="@+id/button4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/button4" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="27dp"
android:layout_marginBottom="95dp"
android:onClick="ReadData"
android:text="Read"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="0dp"
android:layout_height="287dp"
android:layout_marginStart="46dp"
android:layout_marginTop="92dp"
android:layout_marginEnd="46dp"
android:layout_marginBottom="89dp"
app:layout_constraintBottom_toBottomOf="@+id/button3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/textView1"
app:srcCompat="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="54dp"
android:layout_marginTop="40dp"
android:text="Ready to Code"
android:textSize="25sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
-----------------------------------------------------------------------------------------------------------
DOWNLOAD , READ & SAVE FILES FROM FIREBASE
Using getFile( )
(UI same as Above)
package com.deepesh.firebaselearningapp;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FileDownloadTask;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import java.io.File;
public class MainActivity extends AppCompatActivity{
private static final String TAG = "TAG";
TextView textview1;
ImageView imageView;
// Get the reference of your Storage Location.
StorageReference storage_ref;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialises all fields
init();
}
private void init(){
textview1=findViewById(R.id.textView1);
imageView=findViewById(R.id.imageView1);
storage_ref = FirebaseStorage.getInstance().getReference("docs/");
}
// user clicks button
public void InsertData(View view) {
}
// user clicks button
public void ReadData(View view) {
// Create a file on external cache storage
final File outputfile = new File(getExternalCacheDir(),"myimage1.jpg");
// write the fetched file into external file.
FileDownloadTask task = storage_ref.child("images/image1.jpg").getFile(outputfile);
task.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(MainActivity.this, "Filde Downloaded ", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onSuccess: File Downloaded " + outputfile);
imageView.setImageURI(Uri.fromFile(outputfile));
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: DOWNLOAD FAILURE DUE TO : " + e.getMessage());
}
});
}
}
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:onClick="InsertData"
android:text="Insert"
app:layout_constraintBottom_toBottomOf="@+id/button4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/button4" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="27dp"
android:layout_marginBottom="95dp"
android:onClick="ReadData"
android:text="Read"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="0dp"
android:layout_height="287dp"
android:layout_marginStart="46dp"
android:layout_marginTop="92dp"
android:layout_marginEnd="46dp"
android:layout_marginBottom="89dp"
app:layout_constraintBottom_toBottomOf="@+id/button3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/textView1"
app:srcCompat="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="54dp"
android:layout_marginTop="40dp"
android:text="Ready to Code"
android:textSize="25sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
---------------------------------------------------------------------------------------------------------
GET DOWNLOAD URL FOR FILES & DOWNLOAD THE FILES DIRECTLY INTO ANDROID STORAGE.
getDownloadURL() gives a direct download url for the file stored inside the firebase storage.
You Can use the Download Manager Service to download the files using URL.
package com.deepesh.firebaselearningapp;
import android.app.DownloadManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import java.io.File;
public class MainActivity extends AppCompatActivity{
private static final String TAG = "TAG";
TextView textview1;
ImageView imageView;
// Get the reference of your Storage Location.
StorageReference storage_ref;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initialises all fields
init();
}
private void init(){
textview1=findViewById(R.id.textView1);
imageView=findViewById(R.id.imageView1);
storage_ref = FirebaseStorage.getInstance().getReference("docs/");
}
// user clicks button
public void InsertData(View view) {
}
// user clicks button
public void DownLoadData(View view) {
Task<Uri> task = storage_ref.child("images/image1.jpg").getDownloadUrl();
task.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// use toString() on Uri to convert it into URL
Log.d(TAG, "onSuccess: URL IS : " + uri.toString());
DownloadFile(uri);
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Some Error !", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onFailure: Error - " + e.getMessage());
}
});
}
private void DownloadFile(Uri uri) {
File file = new File(getExternalCacheDir(),"myfirebaseimage.jpg");
// DOWNLOADING CODE
DownloadManager manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
// Starts downloading with a notification.
DownloadManager.Request request = new DownloadManager.Request(uri)
.setTitle("File from firebase")
.setDescription("This is file from firebase")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
// this saves the downloaded data into the given file.
.setDestinationUri(Uri.fromFile(file));
//adds to download queue.
manager.enqueue(request);
}
}
(UI SAME AS ABOVE )
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:onClick="InsertData"
android:text="Insert"
app:layout_constraintBottom_toBottomOf="@+id/button4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/button4" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="27dp"
android:layout_marginBottom="95dp"
android:onClick="DownLoadData"
android:text="Read"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="0dp"
android:layout_height="287dp"
android:layout_marginStart="46dp"
android:layout_marginTop="92dp"
android:layout_marginEnd="46dp"
android:layout_marginBottom="89dp"
app:layout_constraintBottom_toBottomOf="@+id/button3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/textView1"
app:srcCompat="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="54dp"
android:layout_marginTop="40dp"
android:text="Ready to Code"
android:textSize="25sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
------------------------------------------------------------------------------------------------------






Comments
Post a Comment