Android – NullPointerException: almacenamiento == null
Hola Tengo problemas con una aplicación para Android que estoy construyendo fuera de un tutorial en línea, sigue fallando cuando intento ejecutarlo con la excepción mencionada. Realmente agradecería alguna ayuda sobre cómo detener este error por favor. Aquí está mi actividad principal:
package com.niall.easytxt; import android.app.Activity; import android.content.Intent; import android.database.DataSetObserver; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnKeyListener; import android.widget.AbsListView; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class MainActivity extends Activity { private ChatArrayAdapter adp; private ListView list; private EditText chatText; private Button send; Intent in; private boolean side = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = getIntent(); send = (Button)findViewById(R.id.btn); list = (ListView)findViewById(R.id.listview); adp = new ChatArrayAdapter(getApplicationContext(),R.layout.chat, null); chatText = (EditText)findViewById(R.id.chat); chatText.setOnKeyListener(new OnKeyListener(){ public boolean onKey(View v, int keyCode, KeyEvent event){ if((event.getAction()==KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { return sendChatMessage(); } return false; } }); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendChatMessage(); } }); list.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); list.setAdapter(adp); adp.registerDataSetObserver(new DataSetObserver() { public void OnChanged(){ super.onChanged(); list.setSelection(adp.getCount() -1); } }); } private boolean sendChatMessage() { adp.add(new ChatMessage(side,chatText.getText().toString())); chatText.setText(""); side =! side; return true; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
Y mi ChatArrayAdapter:
- ¿El cliente REST de Android, Sample?
- ¿Cómo mejorar el rendimiento de GATT de baja energía de Bluetooth de Android?
- Error de Crashlytics durante la compilación - no podría leer el build_id como una cadena de valor
- Dalvik VM vs Sun JVM
- ¿Cómo se puede detectar el modo avión en Android?
package com.niall.easytxt; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.TextView; public class ChatArrayAdapter extends ArrayAdapter<ChatMessage>{ private TextView chatText; private List<ChatMessage> MessageList = new ArrayList<ChatMessage>(); private LinearLayout layout; public ChatArrayAdapter(Context context, int resource, ChatMessage[] objects) { super(context, resource, objects); } public void add(ChatMessage object) { MessageList.add(object); super.add(object); } public int getCount() { return this.MessageList.size(); } public ChatMessage getItem(int index) { return this.MessageList.get(index); } public View getView(int position, View ConvertView, ViewGroup parent) { View v = ConvertView; if(v==null){ LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v =inflater.inflate(R.layout.chat, parent,false); } layout = (LinearLayout)v.findViewById(R.id.Message1); ChatMessage messageobj = getItem(position); chatText = (TextView)v.findViewById(R.id.SingleMessage); chatText.setText(messageobj.message); chatText.setBackgroundResource(messageobj.left ? R.drawable.bubble_a :R.drawable.bubble_b); layout.setGravity(messageobj.left?Gravity.START:Gravity.END); return v; } public Bitmap decodeToBitmap(byte[] decodedByte){ return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); } }
Aquí está el logcat
04-29 05:40:03.988: D/AndroidRuntime(1794): Shutting down VM 04-29 05:40:03.988: E/AndroidRuntime(1794): FATAL EXCEPTION: main 04-29 05:40:03.988: E/AndroidRuntime(1794): Process: com.niall.easytxt, PID: 1794 04-29 05:40:03.988: E/AndroidRuntime(1794): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.niall.easytxt/com.niall.easytxt.MainActivity}: java.lang.NullPointerException: storage == null 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.ActivityThread.access$800(ActivityThread.java:144) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.os.Handler.dispatchMessage(Handler.java:102) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.os.Looper.loop(Looper.java:135) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.ActivityThread.main(ActivityThread.java:5221) 04-29 05:40:03.988: E/AndroidRuntime(1794): at java.lang.reflect.Method.invoke(Native Method) 04-29 05:40:03.988: E/AndroidRuntime(1794): at java.lang.reflect.Method.invoke(Method.java:372) 04-29 05:40:03.988: E/AndroidRuntime(1794): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 04-29 05:40:03.988: E/AndroidRuntime(1794): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 04-29 05:40:03.988: E/AndroidRuntime(1794): Caused by: java.lang.NullPointerException: storage == null 04-29 05:40:03.988: E/AndroidRuntime(1794): at java.util.Arrays$ArrayList.<init>(Arrays.java:38) 04-29 05:40:03.988: E/AndroidRuntime(1794): at java.util.Arrays.asList(Arrays.java:155) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128) 04-29 05:40:03.988: E/AndroidRuntime(1794): at com.niall.easytxt.ChatArrayAdapter.<init>(ChatArrayAdapter.java:26) 04-29 05:40:03.988: E/AndroidRuntime(1794): at com.niall.easytxt.MainActivity.onCreate(MainActivity.java:33) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.Activity.performCreate(Activity.java:5933) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 04-29 05:40:03.988: E/AndroidRuntime(1794): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 04-29 05:40:03.988: E/AndroidRuntime(1794): ... 10 more
- La forma más fácil de dar formato a cadena como 1 000 000
- Error: (124, 62) error: tipos incompatibles: La clase no se puede convertir en Contexto
- ¿Por qué mi JsonObjectRequest no funciona?
- Cargador de clases personalizado para android?
- Permitir que sólo mis aplicaciones Android ejecuten api de punto final en java
- Arrastrar texto girado dentro de un lienzo android no funciona como se esperaba
- Agregar una etiqueta dentro de un TextView en android
- El valor del tipo org.json.JSONArray no se puede convertir en JSONObject
adp = new ChatArrayAdapter(getApplicationContext(),R.layout.chat, null);
su problema está en esta línea. Está pasando null como conjunto de datos. Una referencia nula de ChatMessage[]
. El súper constructor llama
Arrays.asList(objects)
que está causando la excepción. Para arreglarlo, proporcione un conjunto de datos vacío. Por ejemplo, puede cambiar su constructor como:
public ChatArrayAdapter(Context context, int resource) { super(context, resource, MessageList); }
Dentro de la onCreate en MainActivity
adp = new ChatArrayAdapter(getApplicationContext(),R.layout.chat, null);
El tercer argumento a esa llamada es el conjunto de datos, donde el adaptador extraerá los datos. Pasar null lo hará lanzar una NullPointerException tan pronto como intente acceder a sus datos.
Así que para resolver este problema simplemente cambia ese "nulo" en una matriz real de ChatMessage.
- ¿Cómo obtener el ID guardado en SugarORM?
- Delphi XE5 aplicación Android debe procesar las tareas que consumen mucho tiempo dentro de un hilo?