Estoy tratando de copiar una Lista de ‘usrs’, que se creó en una clase Interna a una lista diferente ‘team_memebers’.
Después de copiar trato de recorrer ‘team_memebers’ en el bucle FOR, pero me da un «objeto nulo de referencia’ de error.
Los ‘usuarios’ de la lista contiene los objetos devueltos, evaluados a través de una depuración de las impresiones.

public class ListNodeActivity extends AppCompatActivity
{
    private ParseObject parse_task=null;
    private List<String> team_memebers=null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_node);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> usrs, ParseException e) {
            if (e == null) {

                team_memebers = new ArrayList<String>(usrs.size());
                for (ParseObject prso:usrs) {
                    team_memebers.add(new String(prso.getString("Username")));
                }
            } else {//handle the error
            }
        }
    });

    for (String str:team_memebers)
    {
        empolyeeSpinnerAdapter.add(str);
    }
}

Seguimiento de la pila de

 FATAL EXCEPTION: main
Process: il.ac.shenkar.david.todolistex2, PID: 14490
java.lang.RuntimeException: Unable to start activity ComponentInfo{il.ac.shenkar.david.todolistex2/il.ac.shenkar.david.todolistex2.ListNodeActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
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)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at il.ac.shenkar.david.todolistex2.ListNodeActivity.onCreate(ListNodeActivity.java:116)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
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) 
  • ¿Has probado normal para un bucle con contador en lugar de un bucle foreach? Algo así como for (int i = 0; i< team_memebers.size(); i++) { employeeSpinnerAdapter.add(team_memebers.get(i); }
  • es de consulta.findInBackground en otro hilo…
  • Sí, se produce un error en .size(), tal como aparece team_members es nulo.
  • no, pero traté de consulta.find() y tiene el mismo problema.
  • después de más de código, donde se team_memebers declarado??
  • Añadido más de código.
  • Publica tu stacktrace pls.
  • Añadido el seguimiento de la pila.
  • Estás declaración es que la NPE es en el para(ParseObject prso: los usuarios)? La forma en que este código está escrito probablemente debería NPE en la for(String str: los miembros del equipo) como no veo que la espera para la consulta.findInBackground() llamada a terminar antes de hacer eso interation. Se puede destacar lo que la línea de la NPE en realidad ocurre? Yo no puedo decir que se basa en la pila como tienes dos para(iter) de bucles.
  • Obtengo el error en el ‘(String str : team_memebers)’ loop. He intentado colocarlo en la ‘consulta.findInBackground()’ llama a bloque, pero me sale un mensaje: «variable de entrada se accede en barrios de clase; debe ser declaradas final»
  • para corregir mi comentario anterior, me sale el mensaje de error con respecto a las «…debe ser declaradas final’ en ‘empolyeeSpinnerAdapter’.

InformationsquelleAutor David Faiz | 2016-03-02

1 Comentario

  1. 4

    Su problema es que usted no es la iteración después de copiar la lista.
    query.findInBackground() es asincronica de devolución de llamada y por lo tanto, no se ejecuta inmediatamente. Debido a su bucle de iteración es COLOCADO por debajo de esa llamada, no significa que vaya a ser ejecutado después de la devolución de llamada se ejecuta. Sólo hay que poner su bucle dentro de devolución de llamada como esta:

    query.findInBackground(new FindCallback<ParseObject>() {
    public void done(List<ParseObject> usrs, ParseException e) {
    if (e == null) {
    team_memebers = new ArrayList<String>(usrs.size());
    for (ParseObject prso:usrs) {
    team_memebers.add(new String(prso.getString("Username")));
    }
    for (String str:team_memebers)
    {
    empolyeeSpinnerAdapter.add(str);
    }
    } else {//handle the error
    }
    }
    });
    • He intentado colocarlo en la ‘consulta.findInBackground()’ llama a bloque, pero me sale un mensaje: «variable de entrada se accede en barrios de clase; debe ser declaradas final»
    • En la variable que se obtiene este mensaje? str o team_memebers?
    • De todos modos, te sugiero que para no asignar null a team_memebers, en lugar de declarar la final y activa con la lista vacía: private final List<String> team_memebers = new ArrayList<>(); y quitar esta línea: team_memebers = new ArrayList<String>(usrs.size()); también declarar str como final en su bucle: for (final String str:team_memebers)
    • En ‘empolyeeSpinnerAdapter’
    • Luego de declarar str como final, como dije.
    • Se ha solucionado mediante el movimiento de la creación de la ‘empolyeeSpinnerAdapter’ de la ‘crear’ método.

Dejar respuesta

Please enter your comment!
Please enter your name here