Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 24/06/17, 00:41:27
Array

[xs_avatar]
Andsenus Andsenus no está en línea
Usuario poco activo
 
Fecha de registro: abr 2017
Mensajes: 17
Tu operador: Movistar

Fragment Json gridview

Buenas, vuelvo a intentar ver si alguien puede guiarme.. el tema es asi,no se si alguien ha usado alguna vez una app para conocer gente y demás..

el tema es tener una activity principal donde se interactua mediante fragments.
depende el boton q aprietes carga el fragment: Inicio-Mi perfil-Buscar son a ejemplos.

mi problema es el siguiente, al crear el fragment, e intentar obtener el array de json para llenar un gridview o cualquier otro fragment, me tira que necesito declarar el fragment como final y no puedo pasar de ahi. esta bien este metodo? sugieren algun otro? la app solo es la base, se rellena todo desde la db.

gracias y saludos.
Responder Con Cita


  #2  
Viejo 24/06/17, 10:12:41
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
No pones código, así que voy a suponer lo que te está pasando:

Fragment fragment = new Fragment();
.....
x.setAdapter(new Adapter() {
....
fragment.....
....
});

Si tu caso es parecido a ese, lo que te ocurre es que estás usando una variable local en una clase dentro de otra clase que usas como cliente.

Las soluciones son 2:

La primera es efectivamente declararla como final:

final Fragment fragment = new Fragment();

No hay problema si no vas a volver a cambiar su referencia, pero si vas a tener algo como lo siguiente:

final Fragment fragment = new Fragment();
......
fragment = otroFragment;

No te vale.

La segunda solución es declarar la variable como global, es decir, fuera del ámbito de cualquier método, en ese caso también te funcionará y si podrás usar casos como el código anterior.
Responder Con Cita
  #3  
Viejo 24/06/17, 23:40:56
Array

[xs_avatar]
Andsenus Andsenus no está en línea
Usuario poco activo
 
Fecha de registro: abr 2017
Mensajes: 17
Tu operador: Movistar

este es el codigo del fragment, no se donde dices que hay que declarar la variable como final, en el fragment o en el activity donde se carga el fragment? y si esta activity carga varios fragment dependiendo como se avanze? además pones:
Final Fragment fragment = new fragment(); . si pudieras explicarme que significa se agradece [Final = tipo, Fragment indica que es un fragmento, el fragment minusculo indica que variable es dentro de los fragments? o es el nombre del fragment que estas usando (a ejemplo) , new indica que es un nuevo fragment,y xq queda vacio dentro de los parentesis? ]
voy avanzando en conocimientos a medida que sigo con la app, q empeze de cero a programar.
(Click para mostrar/ocultar)
Código:
    private RequestQueue requestQueue;
    private static final String URL = "url";
    private StringRequest request;
    private StringRequest requestarray;


    public buscar() {
        // Required empty public constructor
    }


     @override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.fragment_buscar, container, false);

        button3 = (Button)view.findViewById(R.id.button3);
        texto = (TextView) view.findViewById(R.id.texto);
        LOCALIDAD = (EditText)view.findViewById(R.id.LOCALIDAD);
        PROVINCIA = (EditText)view.findViewById(R.id.PROVINCIA);

        button3.setOnClickListener(new View.OnClickListener() {
             @override
            public void onClick(View v) {
                final JSONObject jsonObject = new JSONObject(Request.Method.POST, URL, new Response.Listener<String>() {
                     @override
                    public void onResponse(String response) {

                        try {
                            JSONArray = new JSONArray(response);
                            if (JSONArray.class.get(0).equals("msj")) {


                                }

                            }else {
                                Toast.makeText(this.getContext(), jsonObject.getString("error"), Toast.LENGTH_SHORT).show();
                            }
                        } catch (JSONException e)  {
                            e.printStackTrace();
                        }


                    }
                }, new Response.ErrorListener() {
                     @override
                    public void onErrorResponse(VolleyError error) {

                    }
                }) {
                     @override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        HashMap<String, String> hashMap = new HashMap<String, String>();
                        hashMap.put("LOCALIDAD", LOCALIDAD.getText().toString());
                        hashMap.put("PROVINCIA", PROVINCIA.getText().toString());

                        return hashMap;
                    }
                };

                requestQueue.add(request);
            }
        });

        return view;

    }


modifique la url para q no se vea, y esta incompleto,por que no pude hacer el request por ese error.

saludos y gracias por la colaboración.
Responder Con Cita
  #4  
Viejo 25/06/17, 10:48:37
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Sinceramente, si no sabes lo que significa esto:

final Fragment fragment = new Fragment();

El único consejo que te puedo dar, y no te lo tomes a mal, es que vayas, aprendas Java, y cuando sepas Java, vuelves y verás como sabrás resolver tu problema al instante.

Tu problema es un concepto muy básico de Java, de hecho ya lo estás usando aunque no te des cuenta, imagino porque habrás hecho algún copy&paste de algún sitio:

Código:
final JSONObject jsonObject = new JSONObject(Request.Method.POST, URL, new Response.Listener<String>() {
                     @override
                    public void onResponse(String response) {

                        try {
                            JSONArray = new JSONArray(response);
                            if (JSONArray.class.get(0).equals("msj


                                }

                            }else {
                                Toast.makeText(this.getContext(), jsonObject.getString("error"), Toast.LENGTH_SHORT).show();
                            }
                        } catch (JSONException e)  {
                            e.printStackTrace();
                        }


                    }
                }
En ese código declaras a jsonObject como final, porque después un método redefinido en una clase interna va a usarlo, concretamente aquí:

Toast.makeText(this.getContext(), jsonObject.getString("error"), Toast.LENGTH_SHORT).show();

Si jsonObject no fuese final obtendrías el mismo error que te está ocurriendo en otra parte del código, ya que todos los objetos declarados fuera de un contexto deben ser finales si quieres usarlos dentro de ese contexto.

Esto no se aplica si la variable es global, es decir, definida fuera de cualquier método directamente en la clase. En ese caso no tienen porque ser finales.
Responder Con Cita
  #5  
Viejo 08/07/17, 23:17:19
Array

[xs_avatar]
Andsenus Andsenus no está en línea
Usuario poco activo
 
Fecha de registro: abr 2017
Mensajes: 17
Tu operador: Movistar

te agradezco el tiempo,la respuesta la verdad no me sirvio.
como dices es un concepto basico,pero pense aqui podrian ayudarme a aprender. En tal caso tendre que estudiar java y abandonar la consulta a otras personas.
Aunque tu respuesta le saca el sentido al foro,pero bueno.

saludos y gracias.

P.D: Si alguno quiere explicarle a alguien que no tiene terminado el secundario como declarar como final la activity para usarla dentro del request se agradece.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 23:54:09 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /