- Posts del Foro: 5
14 nov. 2016 11:06:53 vía Web
14 nov. 2016 11:06:53 vía Web
El caso es que estoy desarrollando una aplicacion movil, la cual tiene un login y ese login accede a un menu desplegable al que si pincho añadir me sale un activity con cuatro botones y cada boton lleva a otra actividad donde tengo un list view. El caso es que el listview personalizado lo muestra pero la aplicacion revienta y no se por que.
Adjunto la clase principal,los layouts y el adapter
adapter
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class ItemListAdapter extends BaseAdapter {
Context context;
ArrayList<Item> item;
Cabecera cabecera;
Item items;
LayoutInflater inflater;
// este es el constructor del adapter
public ItemListAdapter (Context context,ArrayList<Item>item) {
this.context=context;
this.item=item;
}
@Override
public int getCount() {
return 55;
}
@Override
public Object getItem(int position) {
return item.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int posicion, View convertView, ViewGroup parent) {
cabecera = new Cabecera();
View view = convertView;
if (view == null) {
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.list_item, parent, false);
}
cabecera.setTvPregunta((TextView) view.findViewById(R.id.tvPregunta));
view.setTag(cabecera);
items = new Item();
cabecera.getTvPregunta().setText(items.getPregunta());
//cabecera.getEtRespuesta().setText(item);*/
return view;
}
public static class Cabecera {
TextView tvRespuesta;
public TextView getTvPregunta() {
return tvRespuesta;
}
public void setTvPregunta(TextView tvPregunta) {
this.tvRespuesta = tvPregunta;
}
}
}
clase donde llamo al adapter
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ListView;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.TextHttpResponseHandler;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import cz.msebera.android.httpclient.Header;
public class Analisis extends AppCompatActivity {
ArrayList<Item> items;
static String jsonString = "";
static String preguntas []= null;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_analisis);
FrameLayout contenedor = (FrameLayout) findViewById(R.id.activity_analisis);
LayoutInflater inflater = LayoutInflater.from(this);
View laViewInflada = inflater.inflate(R.layout.list_item, contenedor, true);
invokeWS();
}
// Este metodo es el que conecta con el servidor
public void invokeWS(){
AsyncHttpClient client = new AsyncHttpClient();
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
//esta linea conecta con el servidor y mediante un get recoge todas las preguntas
client.get("nombreurl", new TextHttpResponseHandler() {
// este metodo recoge los status del servidor en el caso de fallar salen alguno de estos errores
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
if (statusCode == 400) {
builder.setTitle("Faltan datos");
builder.setMessage("Introduzca los datos requeridos")
.setPositiveButton("Cerrar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
builder.show();
} else if (statusCode == 404) {
builder.setTitle("Error inesperado");
builder.setMessage("Fallo al conectarse a internet o el servidor no esta disponible en este momento \n Disculpe las molestias")
.setPositiveButton("Cerrar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
builder.show();
}else if(statusCode == 401){
builder.setTitle("Error al iniciar sesión");
builder.setMessage("El usuario o contraseña son erroneos")
.setPositiveButton("Cerrar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
builder.show();
}
}
//Si la conexion falla
//Si se establece conexion
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
JSONArray genreArray = null;
jsonString = responseString;
ItemListAdapter adapter;
ListView lv_lista;
lv_lista = (ListView) findViewById(R.id.lvAnalisis);
ArrayList<Item> array_items = new ArrayList<Item>();
//Aqui creo un json object que luego despues parseo para poder guardar los elementos en un array
JSONObject object = null;
Log.d("onSuccess: ", jsonString);
JSONParser parser = new JSONParser();
Object obj = null;
try {
obj = parser.parse(jsonString);
object = (JSONObject) obj;
genreArray = (JSONArray) object.get("results");
int i;
JSONObject ary;
preguntas= new String[genreArray.size()];
for(i = 0; i<genreArray.size();i++){
ary= (JSONObject) genreArray.get(i);
//System.out.println((String) ary.get("pregunta"));
preguntas[i]=(String) ary.get("pregunta");
}
System.out.println("nuevo array");
System.out.println(items);
System.out.println( Arrays.toString(preguntas));
lv_lista.setAdapter(new ItemListAdapter(context,items));
} catch (ParseException e) {
e.printStackTrace();
}
// aqui llamo al adapter
}
});
}
}
layout principal
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/oesia">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/oesia">
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/etCliente"
android:hint="Cliente"
android:layout_marginTop="30dp"
android:layout_marginLeft="30dp"
android:layout_marginBottom="20dp"
android:layout_width="match_parent"
android:textColor="#000"
android:background="@android:drawable/editbox_background_normal"
android:padding="5dp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/etTitulo"
android:hint="Título"
android:layout_marginLeft="30dp"
android:layout_width="match_parent"
android:textColor="#000"
android:background="@android:drawable/editbox_background_normal"
android:padding="5dp" />
</TableRow>
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:layout_width="match_parent"
android:layout_height="502dp"
android:layout_gravity="start"
android:choiceMode="multipleChoice"
android:dividerHeight="1dp"
android:id="@+id/lvAnalisis" />
</TableLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>
layout del adapter
<TextView
android:text="Pregunta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvPregunta"
android:textColor="#fff"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:layout_marginLeft="2dp" />
<EditText
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/etRespuesta"
android:layout_width="match_parent"
android:textColor="#000"
android:background="@android:drawable/editbox_background_normal"
android:padding="5dp" />
Finalmente adjunto el error detallado
E/AsyncHttpRH: User-space exception detected!
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.view.LayoutInflater.from(LayoutInflater.java:232)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:181)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:166)
at grupooesia.com.oesiacaseapp.ItemListAdapter.<init>(ItemListAdapter.java:0)
at grupooesia.com.oesiacaseapp.Analisis$1.onSuccess(Analisis.java:127)
at com.loopj.android.http.TextHttpResponseHandler.onSuccess(TextHttpResponseHandler.java:118)
at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:351)
at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
— modificado el 14 nov. 2016 13:34:34
Contenido editorial recomendado
Con su consentimiento, aquí se cargan contenidos externos.
Al hacer clic en el botón anterior, acepta que se le muestren contenidos externos. En el proceso pueden transmitirse datos personales a terceros proveedores. Encontrará más información al respecto en nuestro Política de privacidad.