首先,我搜索了一些像我这样的类似问题,但不幸的是我找不到我的代码与他们的相似性所以请在这里我出去
我有一个主要活动类
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)
我确定处理程序项目中没有null用toast测试它但是当我将它传递给getter时它给了我错误我在哪里做错了? :(
答案 0 :(得分:1)
MainActivity update = new MainActivity();
永远不要使用new
实例化活动。它们没有被初始化为有用。
相反,您可以根据需要将活动作为参考传递。变化
public void getContacts(final Context context)
到例如。
public void getContacts(final MainActivity mainActivity)
并使用mainActivity
,您需要一个活动Context
(例如Dialog
s),以及何时需要在MainActivity
上调用方法。
请注意,通常将活动引用传递给异步操作可能会导致严重的内存泄漏,并且您需要将活动生命周期考虑在内 - 当异步操作完成时,活动可能不会处于活动状态。
答案 1 :(得分:0)
尝试删除主活动中的toast或将Mainactivity.this替换为getApplicationContext()。
来自: Toast.makeText(MainActivity.this,itemer [0],Toast.LENGTH_SHORT).show();
到:
Toast.makeText(getApplicationContext(), itemer[0], Toast.LENGTH_SHORT).show();