我觉得自己的记录很糟糕。
经过多次尝试,我无法通过Parse数据获取列表视图以显示一组特定的信息。
这是我的模型......这是来自用户的所有数据:
@ParseClassName("Midwifefirm")
public class Midwifefirm extends ParseObject {
public Midwifefirm() {
// A default constructor is required.
}
//practice name
public String getPracticeName() {
return getString("practicename");
}
public void setPracticeName(String practicename) {
put("practicename", practicename);
}
//education
public String getEducation() {
return getString("education");
}
public void setEducation(String education) {
put("education", education);
}
//years in practice
public String getYearsinPractice() {
return getString("yearsinpractice");
}
public void setYearsinPractice(String yearsinpractice) {
put("yearsinpractice", yearsinpractice);
}
//practice philosophy
public String getPracticePhilosophy() {
return getString("practicephilosophy");
}
public void setPracticePhilosophy(String practicephilosophy) {
put("practicephilosophy", practicephilosophy);
}
我有这个适配器;我想知道在查询部分放置什么,因为我只想将数据拉入数据模型中定义的ListView:
public class CustomMidwifeAdapter extends ParseQueryAdapter<Midwifefirm> {
public CustomMidwifeAdapter(Context context) {
super(context, new ParseQueryAdapter.QueryFactory<Midwifefirm>() {
public ParseQuery<Midwifefirm> create() {
// Here we can configure a ParseQuery to display
// only top-rated meals.
ParseQuery query = new ParseQuery("Midwives");
return query;
}
});
}
@Override
public View getItemView(Midwifefirm midwifefirm, View view, ViewGroup parent) {
if (view == null) {
view = View.inflate(getContext(), R.layout.activity_midwife_result_list, null);
}
//use midwifefirm as item view/list
super.getItemView(midwifefirm, view, parent);
// find in layout the practice name
TextView titleTextView = (TextView) view.findViewById(R.id.practicename);
//in the midwifefirm data model, call getPracticename
titleTextView.setText(midwifefirm.getString("practicename"));
// Add education view
TextView EducationView = (TextView) view.findViewById(R.id.education);
EducationView.setText(midwifefirm.getString("education"));
// Add yearsexperience view
TextView ExperienceView = (TextView) view.findViewById(R.id.yearsinpractice);
ExperienceView.setText(midwifefirm.getString("yearsinpractice"));
//Add practice philosophy view
TextView PracticePhilosophyView = (TextView) view.findViewById(R.id.practicephilosophy);
PracticePhilosophyView.setText(midwifefirm.getString("practicephilosophy"));
return view;
}
}
这是主要活动:
public class MidwifeResultList extends ListActivity {
private ParseQueryAdapter<ParseObject> mainAdapter;
private CustomMidwifeAdapter midwifeListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initialize main ParseQueryAdapter
mainAdapter = new ParseQueryAdapter<ParseObject>(this, Midwifefirm.class);
//which keys in Midwife object
mainAdapter.setTextKey("practicename");
mainAdapter.setTextKey("education");
mainAdapter.setTextKey("yearsinpractice");
mainAdapter.setTextKey("practicephilosophy");
// Initialize the subclass of ParseQueryAdapter
midwifeListAdapter = new CustomMidwifeAdapter(this);
// Default view is all meals
setListAdapter(mainAdapter);
}
每次我跑这个,都没有结果。
提前感谢您提供任何帮助
迈克尔
答案 0 :(得分:1)
我将使用Parse.com关于ParseQueryAdapters
的可爱的脑力争霸API帮助进行猜测。在继续之前,我可以提醒您,我对ParseQueryAdapters的体验是最低限度的,但我认为我对它们有基本的了解+我对Parse有一些经验。总之,
作为一个例子,他们使用这两个
final ParseQueryAdapter adapter = new ParseQueryAdapter(this, "Midwives");
adapter.setTextKey("name");
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
和
// Instantiate a QueryFactory to define the ParseQuery to be used for fetching items in this
// Adapter.
ParseQueryAdapter.QueryFactory<ParseObject> factory =
new ParseQueryAdapter.QueryFactory<ParseObject>() {
public ParseQuery create() {
ParseQuery query = new ParseQuery("Midwives");
return query;
}
};
// Pass the factory into the ParseQueryAdapter's constructor.
ParseQueryAdapter<ParseObject> adapter = new ParseQueryAdapter<ParseObject>(this, factory);
adapter.setTextKey("name");
// Perhaps set a callback to be fired upon successful loading of a new set of ParseObjects.
adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
public void onLoading() {
// Trigger any "loading" UI
}
public void onLoaded(List<ParseObject> objects, ParseException e) {
// Execute any post-loading logic, hide "loading" UI
}
});
// Attach it to your ListView, as in the example above
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
首先,我认为列表中没有任何内容加载的原因与ParseQueryAdapter的启动和自定义适配器之间的一些混淆有关。
您配置基本适配器,并初始化自定义适配器,但您不对自定义适配器执行任何操作,因此自定义适配器似乎包含加载数据模型的逻辑。
我认为你所寻找的是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initialize main ParseQueryAdapter
mainAdapter = new CustomMidwifeAdapter<ParseObject>(this);
//which keys in Midwife object
mainAdapter.setTextKey("practicename");
mainAdapter.setTextKey("education");
mainAdapter.setTextKey("yearsinpractice");
mainAdapter.setTextKey("practicephilosophy");
// Default view is all meals
setListAdapter(mainAdapter);
}
您需要传递的只是上下文(又名“this”),自定义类的构造函数将处理工厂内部
super(context, new ParseQueryAdapter.QueryFactory<Midwifefirm>() {
public ParseQuery<Midwifefirm> create() {
// Here we can configure a ParseQuery to display
// only top-rated meals.
ParseQuery query = new ParseQuery("Midwives");
return query;
}
});
老实说,你做到了:
new ParseQueryAdapter<ParseObject>(this, Midwifefirm.class);
我想知道您是否需要将“QueryFactory”更改为
super(context, new ParseQueryAdapter.QueryFactory<Midwifefirm>() {
public ParseQuery<Midwifefirm> create() {
// Here we can configure a ParseQuery to display
// only top-rated meals.
ParseQuery query = new ParseQuery(MidWifefirm.class);
return query;
}
});
你把一个类传递给查询而不是tableName,但我可能错了。
无论哪种方式,我希望这在某种程度上有所帮助!
答案 1 :(得分:1)
我可以告诉你为什么我认为它现在失败了,我可以告诉你为什么我很确定你在解决当前问题后会失败。
您似乎正在尝试使用不同的类
@ParseClassName("Midwifefirm")
public class Midwifefirm extends ParseObject {
和
ParseQuery query = new ParseQuery("Midwives");
您需要保持一致并使用相同的名称。两者都使用Midwives
或Midwifefirm
。我们假设您选择了后者。你也说
存储在用户表中的所有内容......不确定是否需要创建新表。
上面的查询想要获取Midwives
类型的所有条目。如果没有这种类型,它将什么都不返回。所以你有两个选择:
Midwifefirm
(不要忘记更新上方String
内的@ParseClassName
)并将Midwifefirm
数据存储在其中。您无需为此更改查询。在您的ParseUser
课程中添加一栏,例如type
,您可以设置为Midwifefirm
,或者如果该用户是Midwifefirm
或其他任何内容。然后在您的查询中,您需要添加:
ParseQuery query = new ParseQuery("Midwives");
query.whereEquals("type", "Midwifefirm");
我更喜欢前者。
无论如何,一旦你完成了,问题是你没有使用自定义视图。您依赖于Android默认提供的ListActivity
。我很确定它没有你要追踪的任何字段,所以你应该为此创建一个自定义视图,然后在onCreate
的{{1}}顶部确保你使用它
Activity
顺便说一下,如果你随后在@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_custom_view);
中填充,则以下内容是多余的:
getItemView
最后一条建议:如果您仍有问题,请先设置断点并进行一些调查。您需要检查的是:
mainAdapter.setTextKey("practicename");
mainAdapter.setTextKey("education");
mainAdapter.setTextKey("yearsinpractice");
mainAdapter.setTextKey("practicephilosophy");
,可用于检查是否已检索到任何内容。addOnQueryLoadListener
。