Ver la Versión Completa : [ CONSULTA ] Fragment Json gridview
Andsenus
24/06/17, 00:41:27
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.
kriogeN
24/06/17, 10:12:41
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.
Andsenus
24/06/17, 23:40:56
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.
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.
kriogeN
25/06/17, 10:48:37
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:
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.
Andsenus
08/07/17, 23:17:19
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.
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.