Android JSON解析到ListView

Android JSON解析到ListView,android,json,listview,android-listview,Android,Json,Listview,Android Listview,我正在尝试将JSON数据解析到我的列表视图中。问题是我的JSON没有任何URL;因此,我创建了一个,原因如下: { "items": [ { "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", "title": "Item1", "offer": "2x1", "co

我正在尝试将JSON数据解析到我的列表视图中。问题是我的JSON没有任何URL;因此,我创建了一个,原因如下:

{ 
    "items": [ 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item1",
            "offer": "2x1", 
            "cost": "€10",
            "end_date": "12-9-2015" 
        }, 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item2",
            "offer": "gratis", 
            "cost": "€20", 
            "end_date": "12-9-2015" 
        }, 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item3",
            "offer": "40x1",
            "cost": "€30", 
            "end_date": "12-9-2015" 
        } 
    ] 
}
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {}

    public JSONObject getJSONFromUrl(String url) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;
    }
}
mItems = new ArrayList<ListViewItem>();
Resources resources = getResources();
mItems.add(new ListViewItem(resources.getDrawable(R.drawable.zumo_oferta), getString(R.string.pew), getString(R.string.pew_precio), getString(R.string.pew_descuento), getString(R.string.pew_data)));
setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));
public class ListViewDemoAdapter extends ArrayAdapter<ListViewItem> {
    public ListViewDemoAdapter(Context context, List<ListViewItem> items) {
        super(context, R.layout.listview_item, items);
    }

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

        if(convertView == null) {
            // inflate the GridView item layout
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.listview_item, parent, false);

            // initialize the view holder
            viewHolder = new ViewHolder();
            viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            viewHolder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
            viewHolder.tvDiscount = (TextView) convertView.findViewById(R.id.tvDiscount);
            viewHolder.tvDate = (TextView) convertView.findViewById(R.id.tvDatas);
            convertView.setTag(viewHolder);
        } else {
            // recycle the already inflated view
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // update the item view
        ListViewItem item = getItem(position);
        viewHolder.ivIcon.setImageDrawable(item.icon);
        viewHolder.tvTitle.setText(item.title);
        viewHolder.tvDiscount.setText(item.descuento);
        viewHolder.tvPrice.setText(item.precio);
        viewHolder.tvDate.setText(item.date);

        return convertView;
    }

    private static class ViewHolder {
        ImageView ivIcon;
        TextView tvTitle;
        TextView tvDiscount;
        TextView tvPrice;
        TextView tvDate;
    }
}
现在,我只需要将它放到我的列表视图中。我创建了一个类(JSONParser),如下所示:

{ 
    "items": [ 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item1",
            "offer": "2x1", 
            "cost": "€10",
            "end_date": "12-9-2015" 
        }, 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item2",
            "offer": "gratis", 
            "cost": "€20", 
            "end_date": "12-9-2015" 
        }, 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item3",
            "offer": "40x1",
            "cost": "€30", 
            "end_date": "12-9-2015" 
        } 
    ] 
}
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {}

    public JSONObject getJSONFromUrl(String url) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;
    }
}
mItems = new ArrayList<ListViewItem>();
Resources resources = getResources();
mItems.add(new ListViewItem(resources.getDrawable(R.drawable.zumo_oferta), getString(R.string.pew), getString(R.string.pew_precio), getString(R.string.pew_descuento), getString(R.string.pew_data)));
setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));
public class ListViewDemoAdapter extends ArrayAdapter<ListViewItem> {
    public ListViewDemoAdapter(Context context, List<ListViewItem> items) {
        super(context, R.layout.listview_item, items);
    }

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

        if(convertView == null) {
            // inflate the GridView item layout
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.listview_item, parent, false);

            // initialize the view holder
            viewHolder = new ViewHolder();
            viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            viewHolder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
            viewHolder.tvDiscount = (TextView) convertView.findViewById(R.id.tvDiscount);
            viewHolder.tvDate = (TextView) convertView.findViewById(R.id.tvDatas);
            convertView.setTag(viewHolder);
        } else {
            // recycle the already inflated view
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // update the item view
        ListViewItem item = getItem(position);
        viewHolder.ivIcon.setImageDrawable(item.icon);
        viewHolder.tvTitle.setText(item.title);
        viewHolder.tvDiscount.setText(item.descuento);
        viewHolder.tvPrice.setText(item.precio);
        viewHolder.tvDate.setText(item.date);

        return convertView;
    }

    private static class ViewHolder {
        ImageView ivIcon;
        TextView tvTitle;
        TextView tvDiscount;
        TextView tvPrice;
        TextView tvDate;
    }
}
因此,我陷入了试图将JSON数据(在JSONParser类中)放在哪里的困境,我不知道该怎么办

到目前为止,我尝试的内容如下所示:

//JSON
// url to make request
private static String url = "";

// JSON Node names
private static final String TAG_Items = "items";
private static final String TAG_Image = "Image";
private static final String TAG_title = "title";
private static final String TAG_offer = "offer";
private static final String TAG_cost = "cost";
private static final String TAG_enddate = "end_date";

// contacts JSONArray
JSONArray ofertas = null;
在url上,我没有放任何东西,因为我没有url,我有一个带有JSON的资产文件夹,但我不知道它是否有效

我从JSONParser类创建了一个实例,得到了URL的JSON字符串。此外,我还创建了一个遍历所有项的循环,用于将每个JSON项存储在变量中

现在,我陷入困境,无法找到将这些数据放入我的列表视图中的方法。而且因为我不能做测试…:(

ListViewDemoAdapter的代码行如下所示:

{ 
    "items": [ 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item1",
            "offer": "2x1", 
            "cost": "€10",
            "end_date": "12-9-2015" 
        }, 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item2",
            "offer": "gratis", 
            "cost": "€20", 
            "end_date": "12-9-2015" 
        }, 
        { 
            "Image": "http://camranger.com/wp-content/uploads/2014/10/Android-Icon.png", 
            "title": "Item3",
            "offer": "40x1",
            "cost": "€30", 
            "end_date": "12-9-2015" 
        } 
    ] 
}
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {}

    public JSONObject getJSONFromUrl(String url) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;
    }
}
mItems = new ArrayList<ListViewItem>();
Resources resources = getResources();
mItems.add(new ListViewItem(resources.getDrawable(R.drawable.zumo_oferta), getString(R.string.pew), getString(R.string.pew_precio), getString(R.string.pew_descuento), getString(R.string.pew_data)));
setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));
public class ListViewDemoAdapter extends ArrayAdapter<ListViewItem> {
    public ListViewDemoAdapter(Context context, List<ListViewItem> items) {
        super(context, R.layout.listview_item, items);
    }

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

        if(convertView == null) {
            // inflate the GridView item layout
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.listview_item, parent, false);

            // initialize the view holder
            viewHolder = new ViewHolder();
            viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
            viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            viewHolder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice);
            viewHolder.tvDiscount = (TextView) convertView.findViewById(R.id.tvDiscount);
            viewHolder.tvDate = (TextView) convertView.findViewById(R.id.tvDatas);
            convertView.setTag(viewHolder);
        } else {
            // recycle the already inflated view
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // update the item view
        ListViewItem item = getItem(position);
        viewHolder.ivIcon.setImageDrawable(item.icon);
        viewHolder.tvTitle.setText(item.title);
        viewHolder.tvDiscount.setText(item.descuento);
        viewHolder.tvPrice.setText(item.precio);
        viewHolder.tvDate.setText(item.date);

        return convertView;
    }

    private static class ViewHolder {
        ImageView ivIcon;
        TextView tvTitle;
        TextView tvDiscount;
        TextView tvPrice;
        TextView tvDate;
    }
}
公共类ListViewDemoAdapter扩展了ArrayAdapter{
公共ListViewDemoAdapter(上下文、列表项){
super(上下文、R.layout.listview_项、项);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
//展开GridView项布局
LayoutInflater充气器=LayoutInflater.from(getContext());
convertView=充气机。充气(R.layout.listview_项,父项,false);
//初始化视图保持架
viewHolder=新的viewHolder();
viewHolder.ivIcon=(ImageView)convertView.findViewById(R.id.ivIcon);
viewHolder.tvTitle=(TextView)convertView.findViewById(R.id.tvTitle);
viewHolder.tvPrice=(TextView)convertView.findViewById(R.id.tvPrice);
viewHolder.tvDiscount=(TextView)convertView.findViewById(R.id.tvDiscount);
viewHolder.tvDate=(TextView)convertView.findViewById(R.id.tvDatas);
convertView.setTag(viewHolder);
}否则{
//回收已膨胀的视图
viewHolder=(viewHolder)convertView.getTag();
}
//更新项目视图
ListViewItem=getItem(位置);
viewHolder.ivIcon.setImageDrawable(item.icon);
viewHolder.tvTitle.setText(item.title);
viewHolder.tvDiscount.setText(item.descumento);
viewHolder.tvPrice.setText(item.precio);
viewHolder.tvDate.setText(item.date);
返回视图;
}
私有静态类视图持有者{
ImageView-ivIcon;
文本视图标题;
TextView电视折扣;
文本视图价格;
文本视图日期;
}
}
编辑2 现在,我想做的是:

    public class MisOfertasFragment extends ListFragment {
    private List<ListViewItem> mItems;        // ListView items list
    private Menu optionsMenu;
    public MisOfertasFragment(){}
    ProgressDialog progress;

    //COSAS DEL JSON

    // url to make request
    private static String url = "file:///C:/Users/Skizo/Desktop/jsontest.html";

    // JSON Node names
    private static final String TAG_Items = "items";
    private static final String TAG_Image = "Image";
    private static final String TAG_title = "title";
    private static final String TAG_offer = "offer";
    private static final String TAG_cost = "cost";
    private static final String TAG_enddate = "end_date";


    // contacts JSONArray
    JSONArray ofertas = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);

        //JSON stuff
        // Creating JSON Parser instance
        JSONParser jParser = new JSONParser();

// getting JSON string from URL
        JSONObject json = jParser.getJSONFromUrl(url);

        if (response != "" || response != null) {
            try {

                ArrayList<HashMap<String, String>> map = new ArrayList<HashMap<String, String>>();

                JSONObject Obj = new JSONObject(response); //here will be your complete String from the assest folder

                JSONArray items = Obj.getJSONArray("items");

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

                    HashMap<String, String> hmap = new HashMap<String, String>();

                    JSONObject c = items.getJSONObject(i);

                    String image = c.getString("Image");
                    String title = c.getString("title");
                    String offer = c.getString("offer");
                    String cost = c.getString("cost");
                    String end_date = c.getString("end_date");

                    hmap.put("image", image);
                    hmap.put("title", title);
                    hmap.put("offer", offer);
                    hmap.put("cost", cost);
                    hmap.put("end_date", end_date);

                    map.add(hmap);

                }

            } catch (JSONException e) {

                e.printStackTrace();

            }
        }
        // initialize the items list

        progress = ProgressDialog.show(getActivity(), "Cargando",
                "Espere mientras cargan sus ofertas", true);

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);


                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                getActivity().runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        mItems = new ArrayList<ListViewItem>();
                        Resources resources = getResources();



                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.zumo_oferta), getString(R.string.pew), getString(R.string.pew_precio), getString(R.string.pew_descuento), getString(R.string.pew_data)));


                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.sopa_oferta), getString(R.string.bebo), getString(R.string.bebo_precio), getString(R.string.bebo_descuento), getString(R.string.bebo_data)));
                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.tomate_oferta), getString(R.string.aim), getString(R.string.aim_precio), getString(R.string.aim_descuento), getString(R.string.aim_data)));

                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.levadura_oferta), getString(R.string.youtube), getString(R.string.youtube_precio), getString(R.string.youtube_descuento), getString(R.string.youtube_data)));

                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.tomate_oferta), getString(R.string.aim), getString(R.string.aim_precio), getString(R.string.aim_descuento), getString(R.string.aim_data)));
                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.tomate_oferta), getString(R.string.aim), getString(R.string.aim_precio), getString(R.string.aim_descuento), getString(R.string.aim_data)));

                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.levadura_oferta), getString(R.string.youtube), getString(R.string.youtube_precio), getString(R.string.youtube_descuento), getString(R.string.youtube_data)));

                        mItems.add(new ListViewItem(resources.getDrawable(R.drawable.tomate_oferta), getString(R.string.aim), getString(R.string.aim_precio), getString(R.string.aim_descuento), getString(R.string.aim_data)));
                        // initialize and set the list adapter
                        setListAdapter(new ListViewDemoAdapter(getActivity(), mItems));
                        progress.dismiss();

                    }
                });
            }

        }).start();
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // remove the dividers from the ListView of the ListFragment
        getListView().setDivider(null);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // retrieve theListView item
        ListViewItem item = mItems.get(position);

        // do something
        Toast.makeText(getActivity(), item.title, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.search_view,menu );
        inflater.inflate(R.menu.refresh_menu, menu);
    }

}
公共类MisOfertasFragment扩展了ListFragment{
私有列表mItems;//ListView项目列表
私人菜单选项菜单;
公共MisOfertasFragment(){}
进程对话进程;
//COSAS DEL JSON
//发出请求的url
专用静态字符串url=”file:///C:/Users/Skizo/Desktop/jsontest.html";
//JSON节点名称
私有静态最终字符串标记_Items=“Items”;
私有静态最终字符串TAG_Image=“Image”;
私有静态最终字符串标记_title=“title”;
私有静态最终字符串TAG_offer=“offer”;
私有静态最终字符串标记_cost=“cost”;
私有静态最终字符串标记\u enddate=“end\u date”;
//联系JSONArray
JSONArray ofertas=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置选项菜单(真);
//JSON材料
//创建JSON解析器实例
JSONParser jParser=新的JSONParser();
//从URL获取JSON字符串
JSONObject json=jParser.getJSONFromUrl(url);
如果(响应!=“”| |响应!=null){
试一试{
ArrayList映射=新的ArrayList();
JSONObject Obj=new JSONObject(response);//这是来自assest文件夹的完整字符串
JSONArray items=Obj.getJSONArray(“items”);
对于(int i=0;i