Versuch zum aufrufen der virtuellen Methode auf einem null-Objekt Verweis

Dies ist die Fehlermeldung die ich bekomme:

03-11 08:27:48.513: E/AndroidRuntime(23647): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.plan.yeahimin/com.plan.yeahimin.PlanDetailsActivity}: java.lang.NullPointerException: Versuch zum aufrufen der virtuellen Methode java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)' auf ein null-Objekt Verweis

Verstehe ich aufgrund einer variable mit einem null-Wert, aber ich kann nicht trainieren, warum. Es sieht aus wie es 's ' EXTRA_NEW_PLAN' in der getSerializable() Methode in der DetailsFragment aber andere als die, die ich nicht kenne. Ich bin neu bei Android, so verzeihen Sie mir, wenn es offensichtlich ist, aber jegliche Hilfe würde sehr geschätzt werden.

Hier ist mein code für die ListFragment;

public class PlanListFragment extends ListFragment {

public final static String TAG = "com.plan.yeahimin.PlanListFragment";
public final static String EXTRA_NEW_PLAN = "com.plan.yeahimin.plan_id";

private Button mAddPlan;
private ArrayList<Plan> mPlansList;


public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.empty_view_or_list_view, parent, false);
    ListView view = (ListView) v.findViewById(android.R.id.list);
    view.setEmptyView(v.findViewById(android.R.id.empty));

    mAddPlan = (Button) v.findViewById(R.id.add_a_plan);

    mAddPlan.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            Log.d(TAG, "add plan clicked");
            Plan plan = new Plan();
            Log.d(TAG, "new plan created");
            PlanArrayList.get(getActivity()).addPlans(plan);
            Log.d(TAG, "plan added to mPlansList");
            Intent i = new Intent(getActivity(), PlanDetailsActivity.class);
            i.putExtra(PlanDetailsFragment.EXTRA_NEW_PLAN, plan.getId());
            startActivity(i);
            return;
        }

    });
    return v;
}

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);

    mPlansList = PlanArrayList.get(getActivity()).getPlans();
    //ArrayList<Plan> mPlansList = new ArrayList<Plan>();
    PlanArrayAdapter paa = new PlanArrayAdapter(mPlansList);
    setListAdapter(paa);

}

public class PlanArrayAdapter extends ArrayAdapter<Plan>{


    public PlanArrayAdapter(ArrayList<Plan> planList){ 
        super(getActivity(), 0, planList);

    }

    public View getView(int position, View convertView, ViewGroup parent){

    //Get the plan item for this position
    Plan plan = getItem(position);

    //If layout doesnt exist, inflate one
    if(convertView == null){
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.plan_list_fragment, parent, false);

    }

    TextView planTitle = (TextView) convertView.findViewById(R.id.plan_title);
    planTitle.setText(plan.getTitle());
    TextView planDate = (TextView) convertView.findViewById(R.id.plan_date);
    planDate.setText(plan.getDate().toString());

        return convertView;
    }

}

}

und hier ist mein code für die DetailsFragment, die öffnet sich von der Schaltfläche hinzufügen;

public class PlanDetailsFragment extends Fragment {

private static final String TAG = "com.plan.yeahimin.PlanDetailsFragment";
public static final String EXTRA_NEW_PLAN = "com.plan.yeahimin.plan_id";

private EditText mTitleField;
private Button mDateButton;
private Button mTimeButton;
private EditText mLocationField;
private EditText mAttendeesField;
private EditText mDescriptionField;
private Plan mPlan;
private ArrayList<Plan> mPlansList;

public static PlanDetailsFragment newInstance(UUID planId){


    Bundle args = new Bundle();
    args.putSerializable(EXTRA_NEW_PLAN, planId);
    PlanDetailsFragment f = new PlanDetailsFragment();
    f.setArguments(args);
    Log.d(TAG, "newInstance created");
    return f;

}

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);

    UUID planId = (UUID)getArguments().getSerializable(EXTRA_NEW_PLAN);
    mPlan = PlanArrayList.get(getActivity()).getPlan(planId);
}

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){

    View v = inflater.inflate(R.layout.plan_details_fragment, parent, false);

    mTitleField = (EditText)v.findViewById(R.id.plan_title);

    mLocationField = (EditText)v.findViewById(R.id.plan_location);
    mAttendeesField = (EditText)v.findViewById(R.id.plan_attendees);
    mDescriptionField = (EditText)v.findViewById(R.id.plan_description);
    mDateButton = (Button)v.findViewById(R.id.plan_date);
    mTimeButton = (Button)v.findViewById(R.id.plan_time);


    return v;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
    inflater.inflate(R.menu.main_to_do, menu);

}

public boolean onOptionsItemSelected(MenuItem item){
    switch(item.getItemId()){

    case R.id.save_button:

        Log.d(TAG, "save button pressed");
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

}
  • Problem mit args.putSerializable(EXTRA_NEW_PLAN, planId); Warum verwenden Sie die UUID , die auch zeigen, wo Sie den Aufruf newInstance(UUID)
  • Ihr Problem ist in PlanDetailsActivity. Würden Sie bitte posten?
Schreibe einen Kommentar