我正在编写一个从parse.com数据库下载数据的应用程序。我之前按照他们的教程来研究如何使用数据填充列表。我最初是在一个单独的项目中做到这一点,它没有任何问题。当我将它移动到新项目时,我一直在使用log.D()命令调试代码时遇到问题。
如果我尝试使用Log.d("Here",competitionObj.getName);
,我会得到一个像这样的空对象引用错误。
09-17 01:58:25.015 17230-17230/info.androidhive.materialdesign E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: info.androidhive.materialdesign, PID: 17230
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:139)
at info.androidhive.materialdesign.activity.CompetitionsFragment$1.done(CompetitionsFragment.java:78)
at info.androidhive.materialdesign.activity.CompetitionsFragment$1.done(CompetitionsFragment.java:62)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
我无法理解如何在不添加内容的情况下无法创建对象时返回null。
比赛级别:
package info.androidhive.materialdesign.activity.parseClasses;
import java.util.Date;
public class Competition {
private String id;
private String name;
private String date;
private String location;
private String points;
public Competition(String competitionID, String competitionName, String competitionDate,
String competitionLocation, String competitionPoints ){
id = competitionID;
name = competitionName;
date = competitionDate;
location = competitionLocation;
points = competitionPoints;
}
public String getId() {return id;}
public void setId(String id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getDate() {return date;}
public void setDate(String date) {this.date = date;}
public String getLocation() {return location;}
public void setLocation(String location) {this.location = location;}
public String getPoints() {return points;}
public void setPoints(String points) {this.points = points;}
@Override
public String toString() {return (this.getName()+" - " +this.getDate());}
}
竞争片段类
package info.androidhive.materialdesign.activity;
import android.app.Activity;
import android.app.ListFragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import java.util.ArrayList;
import java.util.List;
import info.androidhive.materialdesign.R;
import info.androidhive.materialdesign.activity.parseClasses.Competition;
public class CompetitionsFragment extends ListFragment {
private ArrayList<Competition> compList;
public CompetitionsFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_competitions, container, false);
compList = new ArrayList<Competition>();
ArrayAdapter<Competition> adapter = new ArrayAdapter<Competition>(getActivity().getBaseContext(),R.layout.list_item_layout, compList);
setListAdapter(adapter);
refreshList();
// Inflate the layout for this fragment
return rootView;
}
private void refreshList() {
Log.d("Here", "Downloading List");
ParseQuery<ParseObject> query = ParseQuery.getQuery("Competitions");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e) {
//If there are values here, update list
if(e == null){
compList.clear();
for (ParseObject comp : list){
Competition competitionObj = new Competition(comp.getString("ObjectID"),comp.getString("Name"),comp.getString("Date"),comp.getString("Location"),comp.getString("Points"));
compList.add(competitionObj);
// String test = competitionObj.getId().toString();
// String test2 = "hello";
Log.d("Here",competitionObj.getId());
//Log.d("Here",competitionObj.getId());
}
((ArrayAdapter<Competition>) getListAdapter()).notifyDataSetChanged();
}
}
});
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
}
提前感谢您的帮助:)
答案 0 :(得分:0)
我还没有完全填充数据库,因此parse正在返回许多字段的空数据。然后无法打印,因此事情崩溃了。
糟糕