2013-12-25 3 views
0

Мне нужно передать настраиваемый массив объектов из одной активности в другую. Когда я пытаюсь прочитать данные во втором действии, я получаю ошибку «NullPointerException» и приложение тормозит.Android раздельные данные между действиями. Получение NullPointerException при попытке чтения данных

Это мой parcelable объект:

package com.tapsistemas.avcanquake; 

import android.os.Parcel; 
import android.os.Parcelable; 

public class TipoEvento implements Parcelable { 

private String evento; 
private String latitud; 
private String longitud; 
private String profundidad; 
private String localizacion; 
private String magnitud; 

public TipoEvento() { 
} 

public void setEvento(String ev){ 
    this.evento = ev; 
} 

public String getEvento(){ 
    return evento; 
} 

public void setLatitud(String lat){ 
    this.latitud = lat; 
} 

public String getLatitud(){ 
    return latitud; 
} 

public void setLongitud(String lon){ 
    this.longitud = lon; 
} 

public String getLongitud(){ 
    return longitud; 
} 

public void setProfundidad(String prof){ 
    this.profundidad = prof; 
} 

public String getProfundidad(){ 
    return profundidad; 
} 

public void setLocalizacion(String loc){ 
    this.localizacion = loc; 
} 

public String getLocalizacion(){ 
    return localizacion; 
} 

public void setMagnitud(String mag){ 
    this.magnitud = mag; 
} 

public String getMagnitud(){ 
    return magnitud; 
} 

public TipoEvento(Parcel parcel){ 
    readToParcel(parcel); 
} 

public static final Parcelable.Creator CREATOR = 
     new Parcelable.Creator() { 

    public TipoEvento createFromParcel(Parcel source) { 
     return new TipoEvento(source); 
    } 

    public TipoEvento[] newArray(int size) { 
     return new TipoEvento[size]; 
    } 

}; 

public int describeContents() { 
    return 0; 
} 

public void writeToParcel(Parcel parcel, int flags) { 
    parcel.writeString(evento); 
    parcel.writeString(latitud); 
    parcel.writeString(longitud); 
    parcel.writeString(profundidad); 
    parcel.writeString(localizacion); 
    parcel.writeString(magnitud); 
} 

public void readToParcel(Parcel parcel){ 
    evento = parcel.readString(); 
    latitud = parcel.readString(); 
    longitud = parcel.readString(); 
    profundidad = parcel.readString(); 
    localizacion = parcel.readString(); 
    magnitud = parcel.readString(); 
} 

} 

Здесь я заполняю свой объект массив с данными (это в OnPostExecute):

    TipoEvento sismo = new TipoEvento(); 

       sismo.setEvento(obj.getString("E")); 
       sismo.setLocalizacion(obj.getString("Loc")); 
       sismo.setLatitud(obj.getString("Lat")); 
       sismo.setLongitud(obj.getString("Lon")); 
       sismo.setProfundidad(obj.getString("Prof")); 
       Eventos.add(sismo); 

Вот, Я посылаю массива данных и запуск второй активность:

botonMapa.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Intent nuevoIntent = new Intent(context, mapa.class); 
      nuevoIntent.putExtra("datos", Eventos); 
      startActivity(nuevoIntent); 

     } 
    }); 

Здесь я пытаюсь получить данные во второй деятельности:

Bundle datos = getIntent().getExtras(); 
Eventos = datos.getParcelable("datos"); 

И вот в чем проблема. Когда я пытаюсь использовать эти данные, я получаю NullPointerException. Если я прокомментирую эти строки, мое приложение работает нормально.

int contador = Eventos.size(); 

for (i=1; i<contador; i++){ 
    String lat = Eventos.get(i).getLatitud(); 
    String lon = Eventos.get(i).getLongitud(); 
    String loc = Eventos.get(i).getLocalizacion(); 
    String pro = Eventos.get(i).getProfundidad(); 
} 

Благодарим вас за интерес и сожаление по поводу моего бедного английского.

EDIT:

Это LogCat авиакатастрофы:

12-25 09:54:04.619: E/AndroidRuntime(826): FATAL EXCEPTION: main 
12-25 09:54:04.619: E/AndroidRuntime(826): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tapsistemas.avcanquake/com.tapsistemas.avcanquake.mapa}: java.lang.NullPointerException 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.os.Looper.loop(Looper.java:137) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.ActivityThread.main(ActivityThread.java:5103) 
12-25 09:54:04.619: E/AndroidRuntime(826): at java.lang.reflect.Method.invokeNative(Native Method) 
12-25 09:54:04.619: E/AndroidRuntime(826): at java.lang.reflect.Method.invoke(Method.java:525) 
12-25 09:54:04.619: E/AndroidRuntime(826): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
12-25 09:54:04.619: E/AndroidRuntime(826): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-25 09:54:04.619: E/AndroidRuntime(826): at dalvik.system.NativeStart.main(Native Method) 
12-25 09:54:04.619: E/AndroidRuntime(826): Caused by: java.lang.NullPointerException 
12-25 09:54:04.619: E/AndroidRuntime(826): at com.tapsistemas.avcanquake.mapa.onCreate(mapa.java:39) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.Activity.performCreate(Activity.java:5133) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
12-25 09:54:04.619: E/AndroidRuntime(826): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
12-25 09:54:04.619: E/AndroidRuntime(826): ... 11 more 
+0

Опубликуйте свой логарифм из крушения. – codeMagic

+0

Опубликовано, спасибо! – Pibs

+0

Что находится в строке 39 'mapa'? Что-то есть «null». Вам нужно посмотреть, что это такое, и отследить оттуда, чтобы понять, почему это «нуль». – codeMagic

ответ

0

заменить

for (i=1; i<contador; i++){ 
    String lat = Eventos.get(i).getLatitud(); 
    String lon = Eventos.get(i).getLongitud(); 
    String loc = Eventos.get(i).getLocalizacion(); 
    String pro = Eventos.get(i).getProfundidad(); 
} 

с

for (i=0; i<contador; i++){ 
    String lat = Eventos.get(i).getLatitud(); 
    String lon = Eventos.get(i).getLongitud(); 
    String loc = Eventos.get(i).getLocalizacion(); 
    String pro = Eventos.get(i).getProfundidad(); 
} 

Я думаю, что ваш список Eventos оказывает только один элемент и y ou пытаются получить доступ к второму элементу (индекс с 1), которого нет в списке. (размер 1 -> индекс 0) (размер 2 -> индекс 0,1)

+0

Да, начальное значение равно 0, я только установил его в 1, ища ошибку. И тестирование и тестирование, которые я забыл, снова установили в 0. Благодарю и счастливого Рождества! – Pibs