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