在list-view中使用android studio从Parse中的指针中检索数据

时间:2015-10-13 07:48:18

标签: java pointers android-studio android-listview parse-platform

我在Parse.com上有两个课程

1-名为 HospitalAppointment ,其中包含约会列表,每个对象都有(AppointmentDate(日期),DoctorFile(指针(指向医生))等等......)

2-班叫医生(有医生姓名(字符串),身份证...其他信息)

我在android studio中有2个java类

1- 我的主要活动在此课程中我会查询类HospitalAppointment

    ParseQuery<ParseObject> doctors = ParseQuery.getQuery("HospitalAppointment");
    doctors.whereEqualTo("AppointmentDate",startDate);
     doctors.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> status, com.parse.ParseException e) {
            if (status == null) {
                 Log.d("score", "no doctor available: ");
            } else {
                mStatus = status;
                DoctorAdapter adapter = new DoctorAdapter(getListView().getContext(), mStatus);
                setListAdapter(adapter);
            }
        }
    });

在DoctorAdapter活动中,我为listview编写函数是问题

public class DoctorAdapter extends ArrayAdapter<ParseObject> {
protected Context mContext;
protected List<ParseObject> mStatus;

public DoctorAdapter(Context context, List<ParseObject> status) {
    super(context, R.layout.doctor_listadapter, status);
    mContext = context;
    mStatus = status;
}


//getview used to inflate each row
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(
                R.layout.doctor_listadapter, null);
        holder = new ViewHolder();//create new view
        holder.mDocName = (TextView) convertView.findViewById(R.id.doctorName);//very imp to convertview
         holder.mDocId = (TextView) convertView.findViewById(R.id.doctorId);

        convertView.setTag(holder);//holder as parameter
    } else {
        holder = (ViewHolder) convertView.getTag();

    }

    ParseObject statusObject = mStatus.get(position);//postition of that row


    ParseObject getDoctorID = statusObject.getParseObject("DoctorName");
    String docId= getDoctorID.getObjectId();
    holder.mDocId.setText(docId);


    *// here is the problem I cannot retrive the Pointer data like Doctor name*


    return convertView;
}

public static class ViewHolder {

     TextView mDocId;
    TextView mDocName;
}}    

我检索对象Id但是指针中的问题我无法从指针获取任何数据我尝试查询方法我称之为“医生”的类名,我确实找到了“医生的ID来获取他的名称,但它不起作用

我尝试做Parse对象,但是我得到了这个对象,但也没有用?

我希望你能帮助我

2 个答案:

答案 0 :(得分:1)

试试这个

ParseObject hospitalAppointment = mStatus.get(position);//postition of that row

ParseObject doctor  = hospitalAppointment.getParseObject("columnName");
doctor.fetchIfNeededInBackground(new GetCallback<ParseObject>() {
    public void done(ParseObject doctor, ParseException e) {
        String docId= doctor.getObjectId();
      // Do something with your new title variable
    }
});

答案 1 :(得分:1)

我遇到了同样的问题。事实上,我有一个类的层次结构,如ClassA有一个字段listPointerB,其中有一个指向ClassB的指针列表,ClassB有一个字段listPointerC有一个指向ClassC的指针列表。

如果我想获取所有数据,请执行以下操作。

ParseQuery<ClassA> query = ParseQuery.getQuery(ClassA.class);
query.include("modules");
query.include("modules.lessons");
query.findInBackground(...);

如果你查看include()方法的文档,它说你可以使用'.'提供字段的嵌套,这对我来说很好。令人惊奇的是,它也适用于列表。它基本上做的是,当你说你想要include一个字段时,它会获取该对象并将其放入有效载荷中。

对于您的情况,您应该这样做:

ParseQuery<ParseObject> doctors = ParseQuery.getQuery("HospitalAppointment");
doctors.whereEqualTo("AppointmentDate",startDate);
doctors.include("DoctorFile");
doctors.findInBackground(...);