Error: java.lang.NullPointerException en android.support.v4.content.Loader
Quiero implementar LoaderManager
en mi aplicación para reducir el tiempo de inicio Como se puede ver aquí, pero después de implementar la sugerencia en ese hilo que estaba recibiendo el siguiente error initLoader(int, Bundle, LoaderManager.LoaderCallbacks) in the type LoaderManager is not applicable for the arguments (int, null, MainActivity)
. Después de buscar aquí encontré la solución para ese segundo error aquí . Pero después de implementar la sugerencia de más tarde, ahora estoy recibiendo el error java.lang.NullPointerException at android.support.v4.content.Loader
. Estoy poniendo el código que tengo actualmente, ¿puede alguien decirme, ¿cómo puedo resolver este problema
CÓDIGO COMPLETO PUEDE SER VISTO AQUÍ
- Tomas de cajones niños vistas superpuestas
- Diálogo de soporte personalizado El texto del fragmento es el color incorrecto
- Com.android.support:design:24.1.0 no se muestra correctamente en la barra de navegación
- Android IntentCompat makeRestartActivity no hace nada en 2.3
- Cómo utilizar android.support.transition
Gato de registro
10-03 20:11:34.849: E/AndroidRuntime(2968): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.sms.it/com.test.sms.it.MainActivity}: java.lang.NullPointerException 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.os.Handler.dispatchMessage(Handler.java:99) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.os.Looper.loop(Looper.java:123) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.app.ActivityThread.main(ActivityThread.java:3683) 10-03 20:11:34.849: E/AndroidRuntime(2968): at java.lang.reflect.Method.invokeNative(Native Method) 10-03 20:11:34.849: E/AndroidRuntime(2968): at java.lang.reflect.Method.invoke(Method.java:507) 10-03 20:11:34.849: E/AndroidRuntime(2968): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 10-03 20:11:34.849: E/AndroidRuntime(2968): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 10-03 20:11:34.849: E/AndroidRuntime(2968): at dalvik.system.NativeStart.main(Native Method) 10-03 20:11:34.849: E/AndroidRuntime(2968): Caused by: java.lang.NullPointerException 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.support.v4.content.Loader.<init>(Loader.java:91) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.support.v4.content.AsyncTaskLoader.<init>(AsyncTaskLoader.java:92) 10-03 20:11:34.849: E/AndroidRuntime(2968): at com.test.sms.it.MainActivity$ContactsDataLoader.<init>(MainActivity.java:104) 10-03 20:11:34.849: E/AndroidRuntime(2968): at com.test.sms.it.MainActivity.onCreateLoader(MainActivity.java:496) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.support.v4.app.LoaderManagerImpl.createLoader(LoaderManager.java:487) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.support.v4.app.LoaderManagerImpl.createAndInstallLoader(LoaderManager.java:496) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.support.v4.app.LoaderManagerImpl.initLoader(LoaderManager.java:550) 10-03 20:11:34.849: E/AndroidRuntime(2968): at com.test.sms.it.MainActivity.onCreate(MainActivity.java:91) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 10-03 20:11:34.849: E/AndroidRuntime(2968): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
MainActivity.java
import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Color; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.ContactsContract; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager; import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.Loader; import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.SimpleAdapter; import android.widget.Spinner; import android.widget.Toast; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); editUser1UserName = (EditText) findViewById(R.id.editTextUser1UserName); editUser1Password = (EditText) findViewById(R.id.editTextUser1Password); editUser2UserName = (EditText) findViewById(R.id.editTextUser2UserName); editUser2Password = (EditText) findViewById(R.id.editTextUser2Password); editUser3UserName = (EditText) findViewById(R.id.editTextUser3UserName); editUser3Password = (EditText) findViewById(R.id.editTextUser3Password); editUser4UserName = (EditText) findViewById(R.id.editTextUser4UserName); editUser4Password = (EditText) findViewById(R.id.editTextUser4Password); editUser5UserName = (EditText) findViewById(R.id.editTextUser5UserName); editUser5Password = (EditText) findViewById(R.id.editTextUser5Password); mTxtPhoneNo = (AutoCompleteTextView) findViewById(R.id.mmWhoNo); mTxtPhoneNo.setThreshold(1); mTxtPhoneNo.setTextColor(Color.BLACK); editText = (EditText) findViewById(R.id.editTextMessage); spinner1 = (Spinner) findViewById(R.id.spinnerGateway); btnsend = (Button) findViewById(R.id.btnSend); btnContact = (Button) findViewById(R.id.btnContact); btnClear = (Button) findViewById(R.id.btnClear); btnClear.setOnClickListener(this); btnsend.setOnClickListener(this); btnContact.setOnClickListener(this); mPeopleList = new ArrayList<Map<String, String>>(); getSupportLoaderManager().initLoader(0, null, this); mTxtPhoneNo.setOnItemClickListener(this); readPerson(); Panel panel; topPanel = panel = (Panel) findViewById(R.id.mytopPanel); panel.setOnPanelListener(this); panel.setInterpolator(new BounceInterpolator(Type.OUT)); getLoginDetails(); } public class ContactsDataLoader extends AsyncTaskLoader<ArrayList<Map<String, String>>> { public ContactsDataLoader(Context context) { super(context); } @Override public ArrayList<Map<String, String>> loadInBackground() { mPeopleList.clear(); Cursor people = getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); while (people.moveToNext()) { String contactName = people .getString(people .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); String contactId = people.getString(people .getColumnIndex(ContactsContract.Contacts._ID)); String hasPhone = people .getString(people .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if ((Integer.parseInt(hasPhone) > 0)) { Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); while (phones.moveToNext()) { String phoneNumber = phones .getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); String numberType = phones .getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); Map<String, String> NamePhoneType = new HashMap<String, String>(); NamePhoneType.put("Name", contactName); NamePhoneType.put("Phone", phoneNumber); if (numberType.equals("0")) NamePhoneType.put("Type", "Work"); else if (numberType.equals("1")) NamePhoneType.put("Type", "Home"); else if (numberType.equals("2")) NamePhoneType.put("Type", "Mobile"); else NamePhoneType.put("Type", "Other"); mPeopleList.add(NamePhoneType); } phones.close(); } } people.close(); startManagingCursor(people); return mPeopleList; } @Override protected void onStartLoading() { super.onStartLoading(); forceLoad(); } } public Loader<ArrayList<Map<String, String>>> onCreateLoader(int id, Bundle args) { return new ContactsDataLoader(context); } public void onLoadFinished(Loader<ArrayList<Map<String, String>>> loader, ArrayList<Map<String, String>> data) { mPeopleList = data; mAdapter = new SimpleAdapter(this, mPeopleList, R.layout.custcontview, new String[] { "Name", "Phone", "Type" }, new int[] { R.id.ccontName, R.id.ccontNo, R.id.ccontType }); mTxtPhoneNo.setAdapter(mAdapter); } public void onLoaderReset(Loader<ArrayList<Map<String, String>>> loader) { mPeopleList = new ArrayList<Map<String, String>>(); mAdapter = new SimpleAdapter(this, mPeopleList, R.layout.custcontview, new String[] { "Name", "Phone", "Type" }, new int[] { R.id.ccontName, R.id.ccontNo, R.id.ccontType }); mTxtPhoneNo.setAdapter(mAdapter); }
- NotifyDataSetChange no funciona en RecyclerView
- Cómo usar setImageTintList () en la API de Android <21
- SetSupportProgressBarIndeterminateVisibility que genera java.lang.NullPointerException cuando se utiliza con Android 5.0 SDK (API 21)
- Utilice Android Support Annotations como @StringRes, @LayoutRes, @DrawableRes para arreglos de enteros
- RecyclerView y DiffUtil - Una pesadilla de concurrencia
- Android Multiline Snackbar
- Android.support.v7 con `ActionBarActivity` no se muestra ningún menú
- RecyclerView no respeta height = wrap_content?
El comentario de RC
es la respuesta de su problema. Pasas un Context
null
(ya que no veo en ninguna parte del código que publicaste la variable de context
inicializada con una referencia válida) a tu cargador personalizado y el código fallará con una NullPointerException
. Si usó mi código de mi respuesta anterior, entonces las devoluciones de llamada se implementarán en su Activity
. En este caso, pase this
, la referencia a su instancia de Activity
actual, a su cargador personalizado:
public Loader<ArrayList<Map<String, String>>> onCreateLoader(int id, Bundle args) { return new ContactsDataLoader(this); }
Además, si cierra el cursor, no es necesario utilizar startManagingCursor()
para ese Cursor
ya que podría tener problemas.