从 Firebase 数据库获取和 ID 的 Intent 问题
Problem with Intent that takes and ID from Firebase Database
我对来自 class 的 Intent 有疑问,它发送带有 Course_ID 的额外字符串,如您在 Firebase 数据库图像中所见。有时在 class UploadFile.class 中,使用额外字符串(包含 Course_ID)获取意图的字符串会获取空值。如果你能推荐我一个新的方法来申请从 Firebase 获取这个 Course_ID,我将不胜感激。在此文本下方附有 Firebase 数据库的屏幕、我有时在 UploadFile.class 中遇到的错误以及 UploadFile.class 的代码和我发送此意图的 class 中的部分代码有额外的字符串。
UploadFile.class
public class UploadFile extends AppCompatActivity {
EditText denumire_material;
Button selectare_material;
ImageView adaugare_material;
DatabaseReference databaseReference;
FirebaseAuth mFirebaseAuth;
FirebaseDatabase reference;
private FirebaseStorage storage;
private StorageReference storageReference;
private Uri pdfUri;
String url;
String generatedFilePath;
Uri downloadUri;
TeacherCoursesFragment teacherCoursesFragment = new TeacherCoursesFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_upload_file);
denumire_material = findViewById(R.id.editBoxDenumireMaterial);
selectare_material = findViewById(R.id.btnSelectareMaterial);
adaugare_material = findViewById(R.id.imgAddMaterial);
mFirebaseAuth = FirebaseAuth.getInstance();
storageReference = FirebaseStorage.getInstance().getReference();
reference = FirebaseDatabase.getInstance();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Materials").child(mFirebaseAuth.getCurrentUser().getUid());
selectare_material.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ContextCompat.checkSelfPermission(UploadFile.this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
selectPDF();
} else{
ActivityCompat.requestPermissions(UploadFile.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},9);
}
}
});
adaugare_material.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(pdfUri!=null){
uploadFile(pdfUri);
adaugareDateInFirebase();
} else{}
}
});
}
private void adaugareDateInFirebase(){
DatabaseReference reference1 = FirebaseDatabase.getInstance().getReference();
Query query = reference1.child(mFirebaseAuth.getCurrentUser().getUid());
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
String datee = dateFormat.format(date).toString();
String course_id = getIntent().getExtras().getString("course id").toString();
HashMap<String, Object> firebase = new HashMap<>();
firebase.put("Denumire_material", denumire_material.getText().toString());
firebase.put("Locatie_material", generatedFilePath);
firebase.put("Teacher_ID", mFirebaseAuth.getCurrentUser().getUid());
firebase.put("Course_ID", course_id);
firebase.put("Data_adaugarii", datee);
databaseReference.push().setValue(firebase).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
}
}
});
}
private void uploadFile(Uri pdfUri) {
final String fileName = System.currentTimeMillis()+"";
StorageReference storageReference = storage.getInstance().getReference();
final StorageReference storageReference1 = storageReference.child("Materiale/" + mFirebaseAuth.getCurrentUser().getUid()+"/"+denumire_material.getText().toString());
storageReference1.putFile(pdfUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
taskSnapshot.getStorage().getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
generatedFilePath = task.getResult().toString();
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(UploadFile.this, "File not succesfully uploaded", Toast.LENGTH_SHORT).show();
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == 9 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
selectPDF();
} else{
Toast.makeText(UploadFile.this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}
TeacherCoursesFragments.class - class 我从那里发送带有额外字符串的意图(当然它包含 id)。
public class TeacherCoursesFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
v = inflater.inflate(R.layout.fragment_teacher_courses, container, false);
ImageView addCourseBtn = (ImageView) v.findViewById(R.id.btnAddCourse);
recyclerView = v.findViewById(R.id.recyclerView_fragmentCourses);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String uid = user.getUid();
createCourse = new CreateCourse();
reference = FirebaseDatabase.getInstance().getReference().child("Courses").child("Teacher-Courses").child(uid);
intent = new Intent(getActivity(), CreateCourse.class);
addCourseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
}
});
return v;
}
@Override
public void onStart() {
super.onStart();
options = new FirebaseRecyclerOptions.Builder<Course>().setQuery(reference, Course.class).build();
adapter = new FirebaseRecyclerAdapter<Course, CourseViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final CourseViewHolder courseViewHolder, int i, @NonNull final Course course) {
courseViewHolder.courseRealName.setText(course.getCourse_name());
String numberOfStudents = String.valueOf(course.getCourse_students());
courseViewHolder.realNumberOfStudents.setText(numberOfStudents);
courseViewHolder.detailsButtonCourse2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), CourseMaterial.class);
intent.putExtra("course id", course.getCourse_ID());
intent.putExtra("teacher id", course.getTeacher_ID());
startActivity(intent);
}
});
courseViewHolder.course_chenar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), CourseOperations.class);
intent.putExtra("course name", course.getCourse_name());
intent.putExtra("course description", course.getCourse_description());
intent.putExtra("course points", String.valueOf(course.getCourse_points()));
intent.putExtra("course students", String.valueOf(course.getCourse_students()));
startActivity(intent);
}
});
courseViewHolder.detailsButtonCourse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), UploadFile.class);
intent.putExtra("course id", course.getCourse_ID());
startActivity(intent);
}
});
}
我是否应该创建 2 个 DatabaseReference,一个用于 Teacher-Courses,一个用于 Materials?我已经尝试过了,但是如果没有 Intent,我无法从 Teacher-Courses 中获取 Course_ID。我在 Whosebug 和 Google 上搜索过,但我根本没有找到任何解决方案。等待你的回应、建议或解决方案,如果你能给我一些。谢谢!
补充说明:课程名称和学生人数(第二个标题)是使用 RecyclerViewAdapter 和 RecyclerViewOptions 从 Firebase 数据库中提取的,如您在 TeacherCoursesFragment.class 中所见。第一个按钮重定向到 UploadFile.class,我在其中上传文件并为其建立名称以存储在 Firebase 存储中。第二个按钮将用户发送到另一个页面,用户可以在其中 select 从多个选项(删除等)。
也许在 UploadFile
中更改此设置:
String course_id = getIntent().getExtras().getString("course id").toString();
为此:
String course_id = getIntent().getStringExtra("course id");
更新:
我猜你应该在 onCreate()
:
中调用 getIntent()
在你的UploadFile
public class UploadFile extends AppCompatActivity {
........
//declare as member variable
private String course_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_upload_file);
//get it here
course_id = getIntent().getStringExtra("course id");
.......
.......
.......
}
}
删除您正在使用的这一行:
String course_id = getIntent().getExtras().getString("course id").toString();
我对来自 class 的 Intent 有疑问,它发送带有 Course_ID 的额外字符串,如您在 Firebase 数据库图像中所见。有时在 class UploadFile.class 中,使用额外字符串(包含 Course_ID)获取意图的字符串会获取空值。如果你能推荐我一个新的方法来申请从 Firebase 获取这个 Course_ID,我将不胜感激。在此文本下方附有 Firebase 数据库的屏幕、我有时在 UploadFile.class 中遇到的错误以及 UploadFile.class 的代码和我发送此意图的 class 中的部分代码有额外的字符串。
UploadFile.class
public class UploadFile extends AppCompatActivity {
EditText denumire_material;
Button selectare_material;
ImageView adaugare_material;
DatabaseReference databaseReference;
FirebaseAuth mFirebaseAuth;
FirebaseDatabase reference;
private FirebaseStorage storage;
private StorageReference storageReference;
private Uri pdfUri;
String url;
String generatedFilePath;
Uri downloadUri;
TeacherCoursesFragment teacherCoursesFragment = new TeacherCoursesFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_upload_file);
denumire_material = findViewById(R.id.editBoxDenumireMaterial);
selectare_material = findViewById(R.id.btnSelectareMaterial);
adaugare_material = findViewById(R.id.imgAddMaterial);
mFirebaseAuth = FirebaseAuth.getInstance();
storageReference = FirebaseStorage.getInstance().getReference();
reference = FirebaseDatabase.getInstance();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Materials").child(mFirebaseAuth.getCurrentUser().getUid());
selectare_material.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ContextCompat.checkSelfPermission(UploadFile.this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
selectPDF();
} else{
ActivityCompat.requestPermissions(UploadFile.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},9);
}
}
});
adaugare_material.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(pdfUri!=null){
uploadFile(pdfUri);
adaugareDateInFirebase();
} else{}
}
});
}
private void adaugareDateInFirebase(){
DatabaseReference reference1 = FirebaseDatabase.getInstance().getReference();
Query query = reference1.child(mFirebaseAuth.getCurrentUser().getUid());
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
String datee = dateFormat.format(date).toString();
String course_id = getIntent().getExtras().getString("course id").toString();
HashMap<String, Object> firebase = new HashMap<>();
firebase.put("Denumire_material", denumire_material.getText().toString());
firebase.put("Locatie_material", generatedFilePath);
firebase.put("Teacher_ID", mFirebaseAuth.getCurrentUser().getUid());
firebase.put("Course_ID", course_id);
firebase.put("Data_adaugarii", datee);
databaseReference.push().setValue(firebase).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
}
}
});
}
private void uploadFile(Uri pdfUri) {
final String fileName = System.currentTimeMillis()+"";
StorageReference storageReference = storage.getInstance().getReference();
final StorageReference storageReference1 = storageReference.child("Materiale/" + mFirebaseAuth.getCurrentUser().getUid()+"/"+denumire_material.getText().toString());
storageReference1.putFile(pdfUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
taskSnapshot.getStorage().getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
generatedFilePath = task.getResult().toString();
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(UploadFile.this, "File not succesfully uploaded", Toast.LENGTH_SHORT).show();
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == 9 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
selectPDF();
} else{
Toast.makeText(UploadFile.this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}
TeacherCoursesFragments.class - class 我从那里发送带有额外字符串的意图(当然它包含 id)。
public class TeacherCoursesFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
v = inflater.inflate(R.layout.fragment_teacher_courses, container, false);
ImageView addCourseBtn = (ImageView) v.findViewById(R.id.btnAddCourse);
recyclerView = v.findViewById(R.id.recyclerView_fragmentCourses);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String uid = user.getUid();
createCourse = new CreateCourse();
reference = FirebaseDatabase.getInstance().getReference().child("Courses").child("Teacher-Courses").child(uid);
intent = new Intent(getActivity(), CreateCourse.class);
addCourseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
}
});
return v;
}
@Override
public void onStart() {
super.onStart();
options = new FirebaseRecyclerOptions.Builder<Course>().setQuery(reference, Course.class).build();
adapter = new FirebaseRecyclerAdapter<Course, CourseViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final CourseViewHolder courseViewHolder, int i, @NonNull final Course course) {
courseViewHolder.courseRealName.setText(course.getCourse_name());
String numberOfStudents = String.valueOf(course.getCourse_students());
courseViewHolder.realNumberOfStudents.setText(numberOfStudents);
courseViewHolder.detailsButtonCourse2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), CourseMaterial.class);
intent.putExtra("course id", course.getCourse_ID());
intent.putExtra("teacher id", course.getTeacher_ID());
startActivity(intent);
}
});
courseViewHolder.course_chenar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), CourseOperations.class);
intent.putExtra("course name", course.getCourse_name());
intent.putExtra("course description", course.getCourse_description());
intent.putExtra("course points", String.valueOf(course.getCourse_points()));
intent.putExtra("course students", String.valueOf(course.getCourse_students()));
startActivity(intent);
}
});
courseViewHolder.detailsButtonCourse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), UploadFile.class);
intent.putExtra("course id", course.getCourse_ID());
startActivity(intent);
}
});
}
我是否应该创建 2 个 DatabaseReference,一个用于 Teacher-Courses,一个用于 Materials?我已经尝试过了,但是如果没有 Intent,我无法从 Teacher-Courses 中获取 Course_ID。我在 Whosebug 和 Google 上搜索过,但我根本没有找到任何解决方案。等待你的回应、建议或解决方案,如果你能给我一些。谢谢!
补充说明:课程名称和学生人数(第二个标题)是使用 RecyclerViewAdapter 和 RecyclerViewOptions 从 Firebase 数据库中提取的,如您在 TeacherCoursesFragment.class 中所见。第一个按钮重定向到 UploadFile.class,我在其中上传文件并为其建立名称以存储在 Firebase 存储中。第二个按钮将用户发送到另一个页面,用户可以在其中 select 从多个选项(删除等)。
也许在 UploadFile
中更改此设置:
String course_id = getIntent().getExtras().getString("course id").toString();
为此:
String course_id = getIntent().getStringExtra("course id");
更新:
我猜你应该在 onCreate()
:
getIntent()
在你的UploadFile
public class UploadFile extends AppCompatActivity {
........
//declare as member variable
private String course_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_upload_file);
//get it here
course_id = getIntent().getStringExtra("course id");
.......
.......
.......
}
}
删除您正在使用的这一行:
String course_id = getIntent().getExtras().getString("course id").toString();