android - 尝试在空对象上调用虚拟方法 'java.lang.Object android.content.Context.getSystemService(java.lang.String)'

标签 android arraylist

<分区>

它一直显示这个错误我一直在寻找这个错误的来源。我快疯了。 我尝试了所有获取数组的替代方法,但没有解决方案。

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;


      }
    }

最佳答案

你应该像这样从 Activity 中调用 fragment 。

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

使用这个。

关于android - 尝试在空对象上调用虚拟方法 'java.lang.Object android.content.Context.getSystemService(java.lang.String)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41638068/

相关文章:

java - PhotoView库获取像素颜色

android - 如何在 Eclipse Juno 中禁用 logcat 文本换行

java - 通过 Socket 发送可序列化的类

powershell - 如何将项目动态添加到 PowerShell ArrayList 并使用运行空间池递归处理它们?

Java BufferedReader 切换大小写同一行存储在数组中

java - 字符串不能包含两个 '%'

javascript - 为什么我的 Cordova Android 应用程序在使用类声明定义对象时抛出 "reserved word"错误?

android - ActionBar 主要部分上的选项卡

java - 如何用java导出pdf格式的列表

java - 我可以在扩展 Thread 的类中使用 ArrayList 吗?