android 数组适配器声明错误

android arrayadapter declaration Error

当我将数组适配器声明为 golbal public 应用程序在我刚启动时崩溃

但是当我在 onClick 方法中声明它时它工作正常

我需要知道发生了什么?

package com.rafahya.myapplication;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    public ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this , android.R.layout.simple_list_item_1 ,arrayList);
    public ArrayList<String> arrayList = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arrayList.add("momen");
        arrayList.add("ahmed");
        arrayList.add("Amin");
        Button button = (Button)findViewById(R.id.ok);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder momen = new AlertDialog.Builder(MainActivity.this)
                        .setTitle("Enter the Zip Code")
                        .setAdapter(arrayAdapter , new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(MainActivity.this , "Momen" ,Toast.LENGTH_LONG).show();
                            }
                        });
                momen.show();
            }
        });
    }
}
public ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this , android.R.layout.simple_list_item_1 ,arrayList);

使用此行,您将尝试在初始化之前访问 MainActivity。当你在 onClick 中键入它时,它将在你在 onCreate 中并且 class 已经初始化时执行。

至于如何修复-首先声明变量

public ArrayAdapter<String> arrayAdapter;

然后在onCreate里面

arrayAdapter = new ArrayAdapter<String>(MainActivity.this , android.R.layout.simple_list_item_1 ,arrayList);