La aplicación se bloquea cuando la adición de la Vista diseño cuando se utiliza int id del SDK de Android

StackOverflow https://stackoverflow.com//questions/25091594

  •  02-01-2020
  •  | 
  •  

Pregunta

Básicamente, el punto de que el código es interpretar una Cadena en una forma que la Vista está creado estará situado en el estado de Vista mencionados.

% $- background:#000000 % 
Hello, World.
% $- background:#ffffff %
$+ id:test type:container %
Test

Aquí está el código.

new Thread() {
        StringBuilder text = new StringBuilder();
        @Override
        public void run() {
            try

            {
                String str = "";
                URL url = new URL("http://example.com/" + mes + "/" + mes + ".meb");
                BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

                while ((str = in.readLine()) != null) {
                    text.append(str);
                }
                in.close();
            } catch (MalformedURLException e1)

            {
            }
            catch (IOException e)
            {
            }
            if(message.contains(".meb")) {
                String strn = text.toString().replace("\n", "").replace("\r", "");
                String str[] = strn.toString().split("%");
                int relative2 = 0;
                final int relative = relative2;
                for (final String l : str) {
                    String code[] = l.split(" ");
                    if (l.toString().contains("$-")) {
                        for(String p : code)
                        {
                            if(p.toString().contains("background"))
                            {
                                final String set[] = p.toString().split(":");
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                (findViewById(R.id.body)).setBackgroundColor(Color.parseColor(set[1]));
                                    }
                                });
                            }
                        }
                    }
                    else if(l.toString().contains("$+"))
                    {
                        String[] g = code[2].split(":");
                        String[] c = code[3].split(":");
                        final String[] test = {g[1], "100"};
                        globvar.add(test);
                        if(c[1].toString().equals("container")) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    final LinearLayout element = new LinearLayout(getApplicationContext());
                                    element.setBackgroundColor(Color.parseColor("#FFFFFF"));
                                    element.setMinimumHeight(50);
                                    element.setId(Integer.parseInt(test[1]));
                                    ((LinearLayout) findViewById(relative)).addView(element);
                                }
                            });
                            relative2 = Integer.parseInt(test[1]);
                        }
                    }
                    else                        {

                        if(!l.toString().isEmpty()) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    final TextView tv = new TextView(getApplicationContext());
                                    tv.setTextColor(Color.parseColor("#000000"));
                                    tv.setTextSize(18);
                                    tv.setText(l);
                                    ((LinearLayout) findViewById(relative)).addView(tv);
                                }
                            });
                        }
                    }
                }
            }
            else {
                if(message == null) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                        }
                    });
                }
            }
        }
    }.start();

Cuando la aplicación se bloquea, me sale el siguiente logcat de error:

08-01 19:44:27.149 29893 29893 E AndroidRuntime: FATAL EXCEPTION: main

08-01 19:44:27.149 29893 29893 E AndroidRuntime: java.lang.NullPointerException

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at example.yemeb.List$1$3.run(List.java:116)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at android.os.Handler.handleCallback(Handler.java:615)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:92)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:137)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:4931)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at java.lang.reflect.Method.invokeNative(Native Method)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Method.java:511)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)

08-01 19:44:27.149 29893 29893 E AndroidRuntime:    at dalvik.system.NativeStart.main(Native Method)

Este registro muestra que se está produciendo el error en ((LinearLayout) findViewById(relativa)).addView(tv);en la línea 116.

¿Cuál es el problema con mi código?

¿Fue útil?

Solución

Porque de código siguiente,

int relative2 = 0;
final int relative = relative2;

el valor de la relación es 0, que es definitiva y no puede ser cambiado.Así que cuando usted realice ((LinearLayout) findViewById(relative)), se convierte en ((LinearLayout) findViewById(0)).Como no hay ninguna vista asociada con el id 0, usted no recibe la referencia a ese punto de vista, por lo tanto el valor es null.Y cuando intenta agregar una vista a ella, se obtiene un nullpointer excepción.

Leer findViewById() desde google docs.Se dice que

Encuentra un punto de vista de que fue identificado por el atributo id del XML fue procesado en onCreate(Bundle).

Devuelve La vista si se encuentra o null en caso contrario.

Así que, básicamente, en su caso, asegúrese de que cuando se intenta encontrar una vista mediante el id, la vista está presente en el fichero xml de diseño con la debida identificación asignado.De modo que cuando el R.java archivo es generado, este identificador se asigna a un valor int.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top