2017-01-13 10 views
0

このエラーが表示され続けますこのエラーの原因を探し続けました。私は夢中になる。 私は配列を取得するためのすべての選択肢を試しましたが、解決策はありませんでした。ヌルオブジェクトで仮想メソッド 'java.lang.Object android.content.Context.getSystemService(java.lang.String)'を呼び出そうとしています

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) 

、ここでは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; 
} 
} 

だとここ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

ここで、あなたはダイアログを呼び出していますか? –

答えて

0

内部のコンテキストを取得するためにgetActivity()を使用することをお勧めします。

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); 

これを使用してください。

+0

感謝しました。 – Ahmad

+0

ハッピーコーディング! –

0

methodTypes methodTypes = new methodTypes(context,paymentMethods);

コンテキストがここにおそらくnullのです。 、そして、

Context context; 

を削除します:

+0

いいえ、動作しませんでした。 – Ahmad

+0

いいえnullではありませんか? – Ryan

0

が削除

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

    addMethod fragment = new addMethod(); 

    return fragment; 
} 

その後、あなたはonCreateView()のような方法でcontextを参照してください場所は、getActivity()contextを交換してください。

+0

これは私にこのエラーを与えるandroid.view.InflateException:バイナリXMLファイル行#40:addView(View、LayoutParams)はAdapterViewでサポートされていません – Ahmad

0

あなたはこれでそれを置き換える、フラグメントの間違ったインスタンスにコンテキストを割り当てる:

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

をしかし、私はちょうどあなたがこのような活動からの断片を呼び出す必要がありFragment

関連する問題

 関連する問題