#java #android #firebase-realtime-database #firebase-storage
#java #Android #firebase-realtime-database #firebase-хранилище
Вопрос:
я пытаюсь сначала загрузить PDF-файл в базу данных реального времени time.so хранилище введите описание изображения здесь загружается загруженный PDF-файл. но я ищу базу данных в реальном времени, в которой не отображается URL-адрес pdf и другие детали.затем проверьте logcat, я обнаружил эту ошибку.
ошибка
2020-09-18 15:52:59.471 30861-30975/com.example.projectx E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Please sign in before trying to get a token.
.Assignment.java
package com.example.projectx.buddhika;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.projectx.R;
import com.example.projectx.kavishka.Pp;
import com.example.projectx.rasuni.Marks;
import com.example.projectx.yasasri.Project;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.firebase.auth.AuthResu<
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Logger;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
public class Assignment extends AppCompatActivity {
private Button button;
Button btn_upload1;
EditText txt_year;
EditText txt_semester;
EditText txt_name1;
EditText txt_subject;
StorageReference storageReference;
DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_assignment);
btn_upload1 = (Button) findViewById(R.id.ass_upload_btn);
txt_year = (EditText) findViewById(R.id.ass_txt_year);
txt_semester = (EditText) findViewById(R.id.ass_txt_semester);
txt_name1 = (EditText)findViewById(R.id.ass_txt_name11);
txt_subject = (EditText) findViewById(R.id.ass_txt_subject);
button = (Button) findViewById(R.id.view);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Assignment.this, Edit_assignment.class);
startActivity(intent);
}
});
//intialize and assign variable
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
//set home selected
bottomNavigationView.setSelectedItemId(R.id.assignment);
//perform itemselected list
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.marks:
startActivity(new Intent(getApplicationContext(), Marks.class));
overridePendingTransition(0, 0);
return true;
case R.id.todo:
startActivity(new Intent(getApplicationContext(), MainActivity2.class));
overridePendingTransition(0, 0);
return true;
case R.id.assignment:
return true;
case R.id.project:
startActivity(new Intent(getApplicationContext(), Project.class));
overridePendingTransition(0, 0);
return true;
case R.id.pp:
startActivity(new Intent(getApplicationContext(), Pp.class));
overridePendingTransition(0, 0);
return true;
}
return false;
}
});
storageReference = FirebaseStorage.getInstance().getReference();
databaseReference = FirebaseDatabase.getInstance().getReference("uploads");
btn_upload1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectPDFFile();
}
});
}
private void selectPDFFile() {
Intent intent = new Intent();
intent.setType("application/pdf");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select PDF File"),1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 amp;amp; resultCode == RESULT_OK
amp;amp; data !=null amp;amp; data.getData()!=null)
{
uploadPDFFile(data.getData());
}
}
private void uploadPDFFile(Uri data) {
final ProgressDialog processDialog = new ProgressDialog(this);
processDialog.setTitle("Uploading...");
processDialog.show();
StorageReference reference = storageReference.child("uploads/" System.currentTimeMillis() ".pdf");
reference.putFile(data).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl();
while (!uri.isComplete());
Uri url = uri.getResult();
Upload_pdf Upload_pdf = new Upload_pdf(txt_name1.getText().toString(),url.toString());
databaseReference.child(databaseReference.push().getKey()).setValue(Upload_pdf);
Toast.makeText(Assignment.this,"File Upload",Toast.LENGTH_SHORT);
processDialog.dismiss();
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount();
processDialog.setMessage("Uploaded:" (int)progress "%");
}
});
}
}
база данных в реальном времени
{
"rules": {
".read": true,
".write": true
}
}
Хранение
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}
}
}
gradle
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 30
buildToolsVersion "30.0.1"
defaultConfig {
applicationId "com.example.projectx"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
implementation 'com.google.firebase:firebase-auth:16.0.4'
implementation 'com.google.firebase:firebase-database:16.0.4'
implementation 'androidx.navigation:navigation-fragment:2.3.0'
implementation 'androidx.navigation:navigation-ui:2.3.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'com.google.firebase:firebase-storage:16.0.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.android.support:cardview-v7: '
}
Комментарии:
1. { «правила»: { «.read»: true, «.write»: true } }
2. я не понял этого
3. не могли бы вы объяснить подробнее об этом?
4. 2020-09-18 15:53:01.704 30861-30977/com.example.projectx E/StorageUtil: ошибка при получении токена java.util.concurrent. ExecutionException: com.google. firebase.internal.api.FirebaseNoSignedInUserException: пожалуйста, войдите в систему, прежде чем пытаться получить токен. (logcat показывает только this.it не показывает, какая строка приводит к ошибке)