2017-01-13 5 views
0

Es zeigt immer wieder diesen Fehler an Ich suchte weiter nach der Quelle dieses Fehlers. Ich werde verrückt. Ich versuchte alle Alternativen, um das Array zu bekommen, aber keine Lösung.Versuch, die virtuelle Methode 'java.lang.Object android.content.Context.getSystemService (java.lang.String)' auf einem Null-Objekt aufzurufen

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 
        at android.view.LayoutInflater.from(LayoutInflater.java:229) 
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:178) 
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:113) 
        at com.ab.savr.activity.SetupActivity.SetupActivity2.methodTypes.<init>(methodTypes.java:0) 
        at com.ab.savr.activity.SetupActivity.SetupActivity2.addMethod.onCreateView(addMethod.java:46) 
        at android.app.Fragment.performCreateView(Fragment.java:2220) 
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
        at android.app.BackStackRecord.run(BackStackRecord.java:793) 
        at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
        at android.app.FragmentManagerImpl$1.run(FragmentManager.java:482) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

und hier ist addmethod

public class addMethod extends DialogFragment { 
boolean chooseAType = false; 
ArrayList<PaymentMethod> paymentMethods = new ArrayList<>(); 
Context context; 
String[] names; 
public addMethod newInstance(Context context) { 
    this.context = context; 

    addMethod fragment = new addMethod(); 

    return fragment; 
} 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.add_method_fragment, container); 
    final Spinner spinner = (Spinner) view.findViewById(R.id.methodSpinner); 
    names = getResources().getStringArray(R.array.PaymentTypes); 
    for(int i = 0;i < names.length;i++){ 

     paymentMethods.add(new PaymentMethod(names[i],i)); 

    } 
    methodTypes methodTypes = new methodTypes(context,paymentMethods); 
    spinner.setAdapter(methodTypes); 
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      chooseAType = true; 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 
    final EditText editText = (EditText) view.findViewById(R.id.addMethodEditText); 
    TextView ok = (TextView) view.findViewById(R.id.okButton); 
    final int pos = spinner.getSelectedItemPosition(); 
    ok.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AddMethodFeedback addMethodFeedback = (AddMethodFeedback) getActivity(); 
      if (editText.getText().toString().trim().length() != 0 && !chooseAType) { 
       getDialog().dismiss(); 
       addMethodFeedback.methodName(editText.getText().toString(), pos); 
      } 
     } 
    }); 
    TextView cancel = (TextView) view.findViewById(R.id.cancelButton); 
    cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getDialog().dismiss(); 
     } 
    }); 
    getDialog().setTitle(getTag()); 

    return view; 
} 
} 

und hier ist methodTypes

public class methodTypes extends ArrayAdapter<PaymentMethod> { 

    Context context; 
    ArrayList<PaymentMethod> paymentMethods; 

    int[] icons = {R.drawable.american_express, R.drawable.check, R.drawable.google_wallet, R.drawable.mastercard, R.drawable.mastercard, R.drawable.western_union 
      , R.drawable.paypal, R.drawable.transfer, R.drawable.visa, R.drawable.visa}; 

    public methodTypes(Context context,ArrayList<PaymentMethod> paymentMethods) { 
     super(context, 0); 
     this.context =context; 
     this.paymentMethods = paymentMethods; 
    } 


    @Override 
    public int getCount() { 
     return paymentMethods.size(); 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     PaymentMethod paymentMethod = paymentMethods.get(position); 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.method_item, parent); 
     TextView name = (TextView) convertView.findViewById(R.id.itemsName); 
     ImageView imageView = (ImageView) convertView.findViewById(R.id.itemsIcon); 
     name.setText(paymentMethod.getName()); 
     imageView.setImageResource(icons[paymentMethod.getType()]); 


     return convertView; 
    } 

    public class ViewHolder { 

     TextView name; 

     ImageView icon; 


     } 
    } 
+0

wo rufst du deinen Dialog an? –

Antwort

0

sollten Sie Fragment von Aktivität wie folgt aufrufen .

DialogFragment fragment = addMethod.newInstance();//getting fragment. 
fragment.show(getActivity().getFragmentManager(), "add_method"); //showing fragment with activity context. 


convertView = View.inflate(R.layout.method_item, parent); 

Verwenden Sie dies.

+0

es funktioniert Dank. – Ahmad

+0

Glückliche Codierung !! –

0

methodTypes methodTypes = new methodTypes(context,paymentMethods);

Kontext hier wahrscheinlich null ist.

+0

nein, hat nicht funktioniert. – Ahmad

+0

Nein, es ist nicht null? – Ryan

0

Löschen:

Context context; 

Dann löschen:

public addMethod newInstance(Context context) { 
    this.context = context; 

    addMethod fragment = new addMethod(); 

    return fragment; 
} 

Dann Orte, wo man zu context in Methoden wie onCreateView() beziehen, ersetzen context mit getActivity().

+0

jetzt gibt es mir diesen Fehler android.view.InflateException: Binär XML-Datei Zeile # 40: AddView (View, LayoutParams) wird nicht in AdapterView unterstützt – Ahmad

0

Sie ordnen Kontext falsche Instanz des Fragments, ersetzen Sie es mit diesem:

public addMethod newInstance(Context context) { 
     addMethod fragment = new addMethod(); 
     fragment.context = context; 
     return fragment; 
    } 

Aber ich würde empfehlen, nur getActivity() mit Kontext bekommen innerhalb der Fragment

Verwandte Themen