我的活动打开时出现此错误:
05-19 14:32:51.189 8851-8851/com.example.gestionproductossw E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.gestionproductossw, PID: 8851
java.lang.NullPointerException
at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
at android.widget.ListView.setAdapter(ListView.java:487)
at com.example.gestionproductossw.Lista_Activity$ObtenerProductos.onPostExecute(Lista_Activity.java:147)
at com.example.gestionproductossw.Lista_Activity$ObtenerProductos.onPostExecute(Lista_Activity.java:104)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5296)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
这是我在活动中的代码:
public class Lista_Activity extends Activity{
private MiArrayAdapter mDatosAdapter;
private ArrayList<JItem> mItems;
private ListView mLista;
private ProgressDialog mPD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lista_layout);
try {
//Asociamos la propiedad al control:
mLista = (ListView) findViewById(R.id.lvLista);
//Control de evento click sobre una fila:
mLista.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) {
//Obtenemos el id del item seleccionado y vamos a editar:
int id = mItems.get(position).getID();
Intent intent = new Intent(Lista_Activity.this,Ficha_Activity.class);
intent.putExtra("idficha", id);
intent.putExtra("producto", mItems.get(position).getTitle());
intent.putExtra("unidades", mItems.get(position).getUnidades());
intent.putExtra("observ", mItems.get(position).getObserv());
startActivityForResult(intent,0);
}
});
} catch (Exception e) {
Log.e(JUtils.TAG,"LA:onCreate:Bundle:"+e.getMessage());
}
}
public void btnAdd_Click(View view){
Intent intent = new Intent(Lista_Activity.this,Ficha_Activity.class);
startActivityForResult(intent,0);
}
@Override
protected void onResume() {
try {
//Mostramos un progress dialog mientras obtenemos los datos del servidor:
mPD = new ProgressDialog(this);
mPD.setCancelable(true);
mPD.show();
//Hacemos la petici�n al servidor del listado de productos:
ObtenerProductos obtenerProductos = new ObtenerProductos();
obtenerProductos.execute();
} catch (Exception e) {
Log.e(JUtils.TAG,"LA:onResume:"+e.getMessage());
}
super.onResume();
}
private class MiArrayAdapter extends ArrayAdapter<JItem>{
public MiArrayAdapter(Context context) {
super(context, R.layout.lista_row_layout,mItems);
}
//Sobreescribimos la funci�n getView, por la cual pasar� cada vez que tenga que "pintar" una fila del ListView
@Override
public View getView(int position, View view, ViewGroup parent) {
//"Inflamos" una fila, indicando el layout a utilizar:
LayoutInflater inflater = Lista_Activity.this.getLayoutInflater();
View rowView= inflater.inflate(R.layout.lista_row_layout, null);
//Rellenamos la fila con la informaci�n (TextView con la ciudad e ImageView con la imagen)
TextView txtTitle = (TextView) rowView.findViewById(R.id.tvTitle);
TextView txtUnidades = (TextView) rowView.findViewById(R.id.tvUnidades);
TextView txtObserv = (TextView) rowView.findViewById(R.id.tvObserv);
txtTitle.setText(mItems.get(position).getTitle());
txtUnidades.setText(String.valueOf(mItems.get(position).getUnidades()));
txtObserv.setText(mItems.get(position).getObserv());
return rowView;
}
}
public class ObtenerProductos extends AsyncTask<JSONObject, JSONObject, JSONArray> {
String resFromServer=null;
private String url = "http://www.enarrations.com/productos_listar.php";
@Override
protected JSONArray doInBackground(JSONObject... data) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
JSONArray respuestaJSON = null;
try {
HttpResponse respuestaWeb = httpclient.execute(httppost);
String respuesta = EntityUtils.toString(respuestaWeb.getEntity());
if (respuesta!=null) {
respuestaJSON = new JSONArray(respuesta);
}
} catch (Exception e) {
Log.e("ObtenerProductos","doIn:"+resFromServer);
}
return respuestaJSON;
}
@Override
protected void onPostExecute(JSONArray datos) {
try{
if (datos!=null) {
//Limpiamos el arrayList que contiene los objetos producto:
mItems = new ArrayList<JItem>();
for (int i=0;i<datos.length();i++){
//Obtenemos el objeto en formato JSON
JSONObject prod = datos.getJSONObject(i);
//Obtenemos los campos:
int cod = prod.getInt("pw_cod");
String producto = prod.getString("pw_producto");
int unidades = prod.getInt("pw_unidades");
String observaciones = prod.getString("pw_observaciones");
//Creamos el objeto item:
JItem item = new JItem(cod, producto, unidades, observaciones);
mItems.add(item);
}
}
}catch (Exception e) {
Log.e("ObtenerProductos","onPostExecute: "+e.getMessage());
}
mDatosAdapter = new MiArrayAdapter(Lista_Activity.this);
mLista.setAdapter(mDatosAdapter);
mPD.dismiss();
super.onPostExecute(datos);
}
}
}
答案 0 :(得分:2)
您的MiArrayAdapter
构造函数将mItems
数组提供给父ArrayAdapter
,但未初始化,因此null
。
有一些先前的问题,mItems
初始化没有运行。