显示java.lang.NullPointerException

时间:2015-05-19 12:42:39

标签: java android nullpointerexception

我的活动打开时出现此错误:

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);
    }
}
}

1 个答案:

答案 0 :(得分:2)

您的MiArrayAdapter构造函数将mItems数组提供给父ArrayAdapter,但未初始化,因此null

有一些先前的问题,mItems初始化没有运行。