打印到日志返回空指针错误 - Android

时间:2015-09-17 01:13:13

标签: java android nullpointerexception null

我正在编写一个从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();
}
}

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

我还没有完全填充数据库,因此parse正在返回许多字段的空数据。然后无法打印,因此事情崩溃了。

糟糕