1

未在主中加载的列表视图我找不到作为数据加载。

我显示主真空

请帮忙。

pFragment.java

公共类 pFragment 扩展 Fragment{

    private ListView plistView;
    public String url = "http://192.168.0.104/sproyect/getmovil";
    AdaptadorPublicaciones adapter;
    JSONObject jsonobject;
    JSONArray jsonarray;


    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        return inflater.inflate(R.layout.public_listv, container, false);
    }

    public void onActivityCreated(Bundle state) {
        super.onActivityCreated(state);

        (new AsyncListViewLoader()).execute(url);

        adapter = new AdaptadorPublicaciones(new ArrayList<Publicaciones>(), getActivity());

        plistView = (ListView)getView().findViewById(R.id.plistView);

        plistView.setAdapter(adapter);



    }

    private class AsyncListViewLoader extends AsyncTask<String, Void, List<Publicaciones>>{

        private final ProgressDialog dialog = new ProgressDialog(getActivity());

        protected void onPostExecute(List<Publicaciones> result){
            super.onPostExecute(result);
            dialog.dismiss();
            adapter.setItemList(result);
            adapter.notifyDataSetChanged();
        }

        protected void onPreExecute(){
            super.onPreExecute();
            dialog.setMessage("Cargando informacion");
            dialog.show();
        }


        @Override
        protected List<Publicaciones> doInBackground(String... params) {
            List<Publicaciones> result = new ArrayList<Publicaciones>();

            try {

                URL u = new URL(params[0]);

                HttpURLConnection conn = (HttpURLConnection)u.openConnection();
                conn.setRequestMethod("GET");

                conn.connect();

                InputStream is = conn.getInputStream();

                byte[] b = new byte[1024];

                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                while( is.read(b) != -1)
                    baos.write(b);

                String JSONResp = new String(baos.toByteArray());

                JSONArray arr = new JSONArray(JSONResp);

                for (int i = 0; i < arr.length(); i++) {

                    result.add(convertItem(arr.getJSONObject(i)));

                }
                return result;

            } catch (Throwable t) {
                t.printStackTrace();
            }
            return null;
        }

    }

    private Publicaciones convertItem(JSONObject obj) throws JSONException {
        String titulo = obj.getString("titulo");
        String estado = obj.getString("estatus");
        String fechap = obj.getString("fechreg");
        int idpublic = obj.getInt("idpublic");
        int avatar = R.drawable.notif;

        return new Publicaciones(idpublic, titulo, estado, fechap, avatar);
    }
}

AdaptadorPublicaciones.java

public class AdaptadorPublicaciones extends ArrayAdapter<Publicaciones>{

    private List<Publicaciones> itemlist;
    private Context context;

    public AdaptadorPublicaciones(List<Publicaciones> itemlist, Context context){
        super(context,android.R.layout.simple_list_item_1,itemlist);
        this.itemlist = itemlist;
        this.context = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView;

        if(v == null){
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.list_views,parent, false);
        }

        Publicaciones pb = itemlist.get(position);

        //AVATAR
        ImageView avatar = (ImageView)v.findViewById(R.id.imgAvatar);
        //avatar.setImageResource(resultp.get("avatar"));

        //TITULO
        TextView titulo = (TextView)v.findViewById(R.id.txTitulo);
        titulo.setText(pb.getTitulo());

        //DISPONIBILIDAD
        TextView dispo = (TextView)v.findViewById(R.id.txDisponibilidad);
        dispo.setText(pb.getEstado());

        //FECHA
        TextView fechap = (TextView)v.findViewById(R.id.txFecha);
        fechap.setText(pb.getFechap());

        //ID PUBLICACION OCULTO
        TextView hdp = (TextView)v.findViewById(R.id.txhpublic);
        hdp.setText(""+ pb.getIdpublic());

        return v;
    }

    public List<Publicaciones> getList(){
        return itemlist;
    }

    public void setItemList(List<Publicaciones> ilist){
        this.itemlist = ilist;
    }

    @Override
    public int getCount() {
        if(itemlist != null)
            return itemlist.size();
        return 0;
    }

    @Override
    public Publicaciones getItem(int position) {
        if(itemlist != null)
            return itemlist.get(position);
        return null;
    }

    @Override
    public long getItemId(int position) {
        if(itemlist != null)
            return itemlist.get(position).hashCode();
        return 0;
    }
}

Publicaciones.java

public class Publicaciones{

    private int idpublic;
    private String titulo;
    private String estado;
    private int avatar;
    private String fechap;



    public Publicaciones(int idpublic, String titulo, String estado, String fechap, int avatar) {
        super();
        this.idpublic = idpublic;
        this.titulo = titulo;
        this.estado = estado;
        this.fechap = fechap;
        this.avatar = avatar;
    }

    public int getAvatar() {
        return avatar;
    }

    public int getIdpublic() {
        return idpublic;
    }

    public String getTitulo() {
        return titulo;
    }

    public String getEstado() {
        return estado;
    }

    public String getFechap() {
        return fechap;
    }






}

en json de retorno muestra este 错误:

11-09 19:43:45.545: W/System.err(608): org.json.JSONException: JSONArray 文本必须在 {"publicaciones":[{"titulo":"Aperturado 的字符 1 处以 '[' 开头curso de ofimatica en los nuevos labatorios.","estatus":"nuevo","idpublic":"9","avatar":"nivel_ofimatica.jpg","fechreg":"2013-11-07"},{ "titulo":"Disponible curso sobre el manejador de bases de datos mysql。","estatus":"nuevo","idpublic":"8","avatar":"nivel_desarrollado_web.png","fechreg":"2013 -11-06"}]}?????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ????????????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????????????? ???????????????????????????????????????????????????? ??????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????? ??????????????????????????????????????????

4

1 回答 1

0

尝试

改变

plistView = (ListView)getView().findViewById(R.id.plistView);

plistView = (ListView) getActivity().findViewById(R.id.plistView);

并且

public void onActivityCreated(Bundle state) {
        super.onActivityCreated(state);

        (new AsyncListViewLoader()).execute(url);

        adapter = new AdaptadorPublicaciones(new ArrayList<Publicaciones>(), getActivity());

        plistView = (ListView)getView().findViewById(R.id.plistView);

        plistView.setAdapter(adapter);

    }

public void onActivityCreated(Bundle state) {
        super.onActivityCreated(state);

        (new AsyncListViewLoader()).execute(url);

        plistView = (ListView)getView().findViewById(R.id.plistView);

    }

protected void onPostExecute(List<Publicaciones> result){
            super.onPostExecute(result);
            dialog.dismiss();
            adapter.setItemList(result);
            adapter.notifyDataSetChanged();
        }

protected void onPostExecute(List<Publicaciones> result){
            super.onPostExecute(result);
            dialog.dismiss();
            adapter = new AdaptadorPublicaciones(result, getActivity());
            plistView.setAdapter(adapter);
        }

编辑:-

改变

                JSONArray arr = new JSONArray(JSONResp);

                for (int i = 0; i < arr.length(); i++) {

                    result.add(convertItem(arr.getJSONObject(i)));

                }

    JSONObject json=new JSONObject(JSONResp);
    JSONArray arr=json.getJSONArray("publicaciones");
            for (int i = 0; i < arr.length(); i++) {

                result.add(convertItem(arr.getJSONObject(i)));

            }
于 2013-11-09T19:27:57.033 回答