Java Android改型“尝试在空对象引用上调用虚拟方法”

Java Android改型“尝试在空对象引用上调用虚拟方法”,java,android,nullpointerexception,retrofit,Java,Android,Nullpointerexception,Retrofit,嗨,首先我搜索了一些类似的问题,比如我的问题,但不幸的是我找不到我的代码与它们的相似之处,所以请在这里告诉我 我有一个主要的活动课 public class MainActivity extends AppCompatActivity { public ProgressDialog loading; public String[] itemer; @Override protected void onCreate(Bundle savedInstanceState) { super.

嗨,首先我搜索了一些类似的问题,比如我的问题,但不幸的是我找不到我的代码与它们的相似之处,所以请在这里告诉我

我有一个主要的活动课

public class MainActivity extends AppCompatActivity {

public ProgressDialog loading;
public String[] itemer;

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

    RetrofitHandler handler = new RetrofitHandler();
    handler.getContacts(MainActivity.this);
}

public void getter(String[] response, int size) {
    String[] itemer;
    itemer = new String[size];
    if (response != null) {
        itemer = response;
        Toast.makeText(MainActivity.this, itemer[0], Toast.LENGTH_SHORT).show();
    }
}
以及我的结果的处理程序

public class RetrofitHandler {
public String[] item;
public static final String ROOT_URL = "http://api.androidhive.info";
public List<Contacts> contacts;

// final MainActivity main = new MainActivity();
public void getContacts(final Context context) {
    final ProgressDialog loading = ProgressDialog.show(context, "Fetching Data", "Please wait...", false, false);

    RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build();
    ContactsAPI api = adapter.create(ContactsAPI.class);

    api.getContacts(new Callback<Contacts>() {
        @Override
        public void success(Contacts contacts, Response response) {
            loading.dismiss();
            MainActivity update = new MainActivity();
            List<Contact> contactList = contacts.getContacts();

            item = new String[contactList.size()];
            int size = contactList.size();
            for (int i = 0; i < contactList.size(); i++) {
                item[i] = contactList.get(i).getName();
            }
            update.getter(item, size);
        }

        @Override
        public void failure(RetrofitError error) {
            Toast.makeText(context, "Error Occured", Toast.LENGTH_LONG).show();
        }
    });


}
但是我在我的主要活动中得到了一个错误,这里是我的日志

              java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                         at android.content.ContextWrapper.getResources(ContextWrapper.java:87)
                                                                         at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81)
                                                                         at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:542)
                                                                         at android.widget.Toast.<init>(Toast.java:102)
                                                                         at android.widget.Toast.makeText(Toast.java:259)
                                                                         at com.exist.kelvs.retrofit2.MainActivity.getter(MainActivity.java:55)
                                                                         at com.exist.kelvs.retrofit2.RetrofitHandler$1.success(RetrofitHandler.java:41)
                                                                         at com.exist.kelvs.retrofit2.RetrofitHandler$1.success(RetrofitHandler.java:28)
                                                                         at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)
                                                                         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)

我确保处理程序项where not null使用toast对其进行了测试,但当我将其传递给getter时,它会给出一个错误:我哪里做错了

尝试删除主活动中的toast或替换Mainactivity.this以获取ApplicationContext

发件人: Toast.makeTextMainActivity.this,itemer[0],Toast.LENGTH\u SHORT.show

致:

永远不要用new实例化活动。它们没有初始化为有用

相反,您可以在需要时将活动作为引用传递。改变

public void getContacts(final Context context)
到,例如

public void getContacts(final MainActivity mainActivity)
并在需要活动上下文的地方使用mainActivity,例如对话框和需要调用mainActivity上的方法时


请注意,通常将活动引用传递给异步操作可能会导致严重的内存泄漏,您需要考虑活动生命周期-异步操作完成时,活动可能不处于活动状态。

MainActivity中的第55行是什么?删除toast时,可能会重复您的解决方案,但运行良好,但在尝试getApplicationContext时,错误仍然相同:我认为您的数组itemer是空的。您在类中声明了两次itemer,并在getter函数中检查它,这可能会导致数组的emty值。非常感谢您,效果非常好。但最后一件事是,如果我需要用另一个类调用我的处理程序,我应该使用什么方法?@laalto你能帮我一下吗。。我只在棉花糖上被这个问题困住了
public void getContacts(final Context context)
public void getContacts(final MainActivity mainActivity)