0

我试图从 firebase 检索数据到详细活动。在 listview 上,它显示得很完美。但是当我点击时,详细活动打开但仍然是空的。所有它都说“W / ClassMapper:在类com.example.scheduletask.model.Task上找不到url的设置器/字段”。我以为没有使用模型任务的设置器,但我不知道......对不起,我不明白,我不知道我错过了什么:(感谢任何帮助,谢谢

任务活动.java

package com.example.scheduletask;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.scheduletask.adapter.MatkulAdapter;
import com.example.scheduletask.adapter.TaskAdapter;
import com.example.scheduletask.adapter.TaskDetailAdapter;
import com.example.scheduletask.database.FirebaseTaskHelper;
import com.example.scheduletask.model.Matkul;
import com.example.scheduletask.model.Task;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Iterator;

public class TaskActivity extends AppCompatActivity {
DatabaseReference databaseReference;
ListView listViewTask;

FloatingActionButton fabAddTask;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_task);

    databaseReference = FirebaseDatabase.getInstance().getReference("Task");
    listViewTask = findViewById(R.id.tasklist);
    
    showData();

    fabAddTask = findViewById(R.id.fab_addtask);
    fabAddTask.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(TaskActivity.this, CreateTaskActivity.class);
            startActivity(intent);
        }
    });

    listViewTask.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String subjectTask = ((TextView)view.findViewById(R.id.txt_subjectlisttask)).getTag().toString();
            Intent taskDetail = new Intent(TaskActivity.this, TaskDetailActivity.class);

            taskDetail.putExtra("subjectTask", subjectTask);

            startActivity(taskDetail);
        }
    });

}

private void showData() {
    final ArrayList<String> subjectTask = new ArrayList<>();
    final ArrayList<String> taskDueDate = new ArrayList<>();
    final ArrayList<String> taskDescription = new ArrayList<>();
    final ArrayList<String> imageURL = new ArrayList<>();

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Iterable<DataSnapshot> snapshotIterable = dataSnapshot.getChildren();
            Iterator<DataSnapshot> iterator = snapshotIterable.iterator();

            while (iterator.hasNext()){
                Task value = iterator.next().getValue(Task.class);
                assert value != null;
                subjectTask.add(value.getSubjectTask());
                taskDescription.add(value.getTaskDescription());
                taskDueDate.add(value.getTaskDueDate());
                imageURL.add(value.getImageURL());

                ((TaskAdapter)listViewTask.getAdapter()).notifyDataSetChanged();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
    listViewTask.setAdapter(new TaskAdapter(subjectTask, taskDescription, taskDueDate, imageURL, this));
}

@Override
protected void onResume() {
    super.onResume();
    showData();
}
}

Task.java(这是模型)

package com.example.scheduletask.model;

public class Task {

    private String taskDueDate;

    public String getTaskDueDate() {
        return taskDueDate;
    }

    public void setTaskDueDate(String taskDueDate) {
        this.taskDueDate = taskDueDate;
    }

    private String subjectTask;

    public String getTaskDescription() {
        return taskDescription;
    }

    public void setTaskDescription(String taskDescription) {
        this.taskDescription = taskDescription;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }

    private String taskDescription;
    private String imageURL;

    public String getSubjectTask() {
        return subjectTask;
    }

    public void setSubjectTask(String subjectTask) {
        this.subjectTask = subjectTask;
    }
}

TaskDetailActivity.java

package com.example.scheduletask;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.example.scheduletask.model.Task;
import com.github.barteksc.pdfviewer.PDFView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

public class TaskDetailActivity extends AppCompatActivity {

    EditText edtSubject, edtDueDate, edtDescription;
    ImageView filePhoto;
    ProgressBar progressBarDetail;
    Button btnEdit, btnDelete;

    DatabaseReference databaseReference;
    private String photoURL, subjectTask;

    Button btnViewPDF;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_task_detail);

        databaseReference = FirebaseDatabase.getInstance().getReference("Task");

        subjectTask = getIntent().getExtras().getString("subjectTask");

        progressBarDetail = findViewById(R.id.progressbardetail);
        progressBarDetail.setVisibility(View.INVISIBLE);

        readData();
        findAllViewsID();

    }

    private void readData() {
        progressBarDetail.setVisibility(View.VISIBLE);

        Query findQuery = databaseReference.orderByKey().equalTo(subjectTask);

        findQuery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot getSnapshot : dataSnapshot.getChildren()){
                    edtSubject.setText(getSnapshot.child("subjectTask").getValue().toString());
                    edtDescription.setText(getSnapshot.child("taskDescription").getValue().toString());
                    edtDueDate.setText(getSnapshot.child("taskDueDate").getValue().toString());
                    photoURL = getSnapshot.child("imageURL").getValue().toString();

                    Picasso.get().load(photoURL).fit().into(filePhoto);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                progressBarDetail.setVisibility(View.INVISIBLE);
            }
        });
        progressBarDetail.setVisibility(View.INVISIBLE);
    }

    private void findAllViewsID() {
        edtSubject = findViewById(R.id.edt_updatetasksubject);
        edtDescription = findViewById(R.id.edt_updatetaskdescription);
        edtDueDate = findViewById(R.id.edt_updateduedatetime);
        filePhoto = findViewById(R.id.iv_taskphotoinput);
        btnViewPDF = findViewById(R.id.btn_viewpdf);
        btnDelete = findViewById(R.id.btn_deletetask);
        btnEdit = findViewById(R.id.btn_edittask);
    }
}

任务适配器.java

package com.example.scheduletask.adapter;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.example.scheduletask.R;
import com.example.scheduletask.TaskActivity;
import com.example.scheduletask.TaskDetailActivity;
import com.example.scheduletask.model.Task;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;

public class TaskAdapter extends BaseAdapter {

    private ArrayList<String> subjectTask;
    private ArrayList<String> taskDescription;
    private ArrayList<String> taskDueDate;
    private ArrayList<String> imageURL;
    private AppCompatActivity activity;

    public TaskAdapter(ArrayList<String> subjectTask, ArrayList<String> taskDescription, ArrayList<String> taskDueDate, ArrayList<String> imageURL, AppCompatActivity activity) {
        this.subjectTask = subjectTask;
        this.taskDescription = taskDescription;
        this.taskDueDate = taskDueDate;
        this.imageURL = imageURL;
        this.activity = activity;
    }

    Context ctx;
    ArrayList<Task> tasks;

    @Override
    public int getCount() {
        return subjectTask.size();
    }

    @Override
    public Object getItem(int position) {
        return subjectTask.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    public TaskAdapter(@NonNull Context ctx, ArrayList<Task> tasks) {
        this.ctx = ctx;
        this.tasks = tasks;
    }

    public View getView(int position, View view, ViewGroup parent) {
        view = LayoutInflater.from(activity.getApplicationContext())
                .inflate(R.layout.list_task, parent, false);

                view.findViewById(R.id.txt_subjectlisttask).setTag(String.valueOf(subjectTask.get(position)));
                ((TextView)view.findViewById(R.id.txt_subjectlisttask)).setText(String.valueOf(subjectTask.get(position)));
                ((TextView)view.findViewById(R.id.txt_duedatetasklist)).setText(String.valueOf(taskDueDate.get(position)));

        return view; }

}

这是我单击任务列表视图时的 logcat 这是logcat的截图

这是我的数据库 数据库截图

4

0 回答 0