当前位置: 首页 > 知识库问答 >
问题:

如何在列表碎片中使用JSON获取图像?

柳德义
2023-03-14

我是android开发的新手,我正在使用JSON解析方法解析我的数据,我用List Fragment扩展了我的类,我希望我的数据在列表视图中,但问题是除了图像之外,我得到的所有数据都很完美,我不知道如何解算,我的回答如下

 {"matching":[{"name":"Monic Dano","profile_id":"GM335695","image":"http://mywebsitename.com/images/Girlnoimage.jpg","cast":"","age":"24","location":"Ivory Coast"}]}

public class HomeFragment extends ListFragment {

    //CustomAdapter adapter;
    //private List<RowItem> rowItems;

    private ProgressDialog pDialog;
    //JSON parser class
    JSONParser jsonParser = new JSONParser();

    JSONArray matching=null;

    ArrayList<HashMap<String,String>> aList;
    private static String MATCH_URL = null;
    private static final String TAG_MATCH="matching";
    private static final String TAG_NAME="name";
    private static final String TAG_PROFILE="profile_id";
    private static final String TAG_IMAGE="image";
    private static final String TAG_CAST="cast";
    private static final String TAG_AGE="age";
    private static final String TAG_LOCATION="location";

    private ListView listview;

    public HomeFragment(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        String strtext = getArguments().getString("user_login_id");
         MATCH_URL = "http://mywebsitename.com/webservice/matching?version=apps&user_login_id="+strtext;
        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
        aList = new ArrayList<HashMap<String,String>>();

       // rowItems = new ArrayList<RowItem>();

        listview=(ListView)rootView.findViewById(android.R.id.list);

        new LoadAlbums().execute();



        return rootView;
    }

    class LoadAlbums extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(HomeFragment.this.getActivity());
            pDialog.setMessage("Loading...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }
        protected String doInBackground(String... args) {
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            String jsonStr = sh.makeServiceCall(MATCH_URL, ServiceHandler.GET);

            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    matching = jsonObj.getJSONArray(TAG_MATCH);

                    // looping through All Contacts
                    for (int i = 0; i < matching.length(); i++) {
                        JSONObject c = matching.getJSONObject(i);

                        // Storing each json item values in variable
                        String user_name = c.getString(TAG_NAME);
                        String user_profile=c.getString(TAG_PROFILE);
                        String user_image=c.getString(TAG_IMAGE);
                        String user_cast=c.getString(TAG_CAST);
                        String user_age=c.getString(TAG_AGE);
                        String user_location=c.getString(TAG_LOCATION);



                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        map.put(TAG_NAME,user_name);
                        map.put(TAG_PROFILE, user_profile);
                        map.put(TAG_IMAGE, user_image);
                        map.put(TAG_CAST, user_cast);
                        map.put(TAG_AGE, user_age+" years");
                        map.put(TAG_LOCATION, user_location);



                        // adding HashList to ArrayList
                        aList.add(map);


                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return null;
        }


        protected void onPostExecute(String file_url) {

            super.onPostExecute(file_url);
            // dismiss the dialog after getting all albums
            if (pDialog.isShowing())
            pDialog.dismiss();
            // updating UI from Background Thread

                    /**
                     * Updating parsed JSON data into ListView
                     * */

                    // updating listview

                   CustomAdapter adapter = new CustomAdapter(getActivity(),aList);
                    setListAdapter(adapter);
                }

        }




}

共有3个答案

桂德义
2023-03-14

我几乎不建议您使用Android Query来实现这一点。Android本身提供的令人惊叹的api。您可以下载图像、下载位图或任何您想做的事情。您可以从这里下载jar文件:这里下载jar文件并将jar设置为您的构建路径。

AQuery androidAQuery=new AQuery(this);

以直接从url加载图像为例:

androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW);

例如,从url获取位图:

androidAQuery.ajax(YOUR IMAGE URL,Bitmap.class,0,new AjaxCallback<Bitmap>(){
                        @Override
                        public void callback(String url, Bitmap object, AjaxStatus status) {
                            super.callback(url, object, status);

                            //You will get Bitmap from object.
                        }

                    });

它非常快速和准确,使用这个你可以在加载时找到更多像动画一样的功能;如果需要,获取位图;等等。

//Declare adapter globally.
private EfficientAdapter adapter;
//Initialize it in onCreate() method
adapter = new EfficientAdapter(this);
//Set your adapter like
listview.setAdapter(adapter);
//Adapter class code



    private class EfficientAdapter extends BaseAdapter {

            private LayoutInflater mInflater;
            private Context context;

            public EfficientAdapter(Context context) {
                mInflater = LayoutInflater.from(context);
                this.context = context;
            }

            @Override
            public int getCount() {
                return aList.size();
            }

            @Override
            public Object getItem(int arg0) {
                return null;
            }

            @Override
            public long getItemId(int position) {
                return 0;
            }

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

                final ViewHolder holder;

                if (convertView == null) {
                    convertView = mInflater.inflate(R.layout.YOUR ITEM LAYOUT, null);
                    holder = new ViewHolder();
                    holder.txtName = (TextView) convertView.findViewById(R.id.txtName);
                    holder.txtProfile = (TextView) convertView.findViewById(R.id.txtProfile);
                    holder.txtCast = (TextView) convertView.findViewById(R.id.txtCast);
                    holder.txtAge = (ImageView) convertView.findViewById(R.id.txtAge);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }

                holder.txtName.setText(aList.get(position).get(TAG_NAME));
                holder.txtProfile.setText(aList.get(position).get(TAG_PROFILE));
                holder.txtCast.setText(aList.get(position).get(TAG_CAST));
                holder.txtAge.setText(aList.get(position).get(TAG_AGE));
                aQuery.id(holder.imgUser).image(data.get(position).get(TAG_IMAGE), true, true);
                return convertView;
            }

            class ViewHolder {
                TextView txtName;
                TextView txtProfile;
                TextView txtCast;
                TextView txtAge;
                ImageView imgUser;
            }

        }
陆晓博
2023-03-14

您可以使用通用图像加载程序从服务器查看图像。Z
只需传递图像URL和您的视图,您就可以开始了。

这里是Universal Image loader及其所有文档的链接,供您参考
https://github.com/nostra13/Android-Universal-Image-Loader

希望它能帮助你。

仉英朗
2023-03-14

尝试使用自定义适配器进行AndroidQuery:

public class CustomAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<HashMap<String,String>> listData;
    private AQuery aQuery;

    private static final String TAG_NAME="name";
    private static final String TAG_PROFILE="profile_id";
    private static final String TAG_IMAGE="image";
    private static final String TAG_CAST="cast";
    private static final String TAG_AGE="age";
    private static final String TAG_LOCATION="location";


    public CustomAdapter(Context context,ArrayList<HashMap<String,String>> listData) {
        this.context = context;
        this.listData=listData;
        aQuery = new AQuery(this.context);
    }

    @Override
    public int getCount() {
        return listData.size();
    }

    @Override
    public Object getItem(int position) {
        return listData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null);
            holder.propic = (ImageView) convertView.findViewById(R.id.propic);
            holder.txtproname = (TextView) convertView.findViewById(R.id.txtproname);
            holder.txtproid = (TextView) convertView.findViewById(R.id.txtproid);
            holder.txtprofilecast = (TextView) convertView.findViewById(R.id.txtprofilecast);
            holder.txtprofileage = (TextView) convertView.findViewById(R.id.txtprofileage);
            holder.txtprofileplace = (TextView) convertView.findViewById(R.id.txtprofileplace);

            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txtproname.setText(listData.get(position).get(TAG_NAME));
        holder.txtproid.setText(listData.get(position).get(TAG_PROFILE));
        holder.txtprofilecast.setText(listData.get(position).get(TAG_CAST));
        holder.txtprofileage.setText(listData.get(position).get(TAG_AGE));
        holder.txtprofileplace.setText(listData.get(position).get(TAG_LOCATION));

        aQuery.id(holder.propic).image(listData.get(position).get(TAG_IMAGE),true,true,0,R.drawable.ic_launcher);

        // image parameter : 1 : memory cache,2:file cache,3:target width,4:fallback image
        return convertView;
    }
    class ViewHolder{
        ImageView propic;
        TextView txtproname;
        TextView txtproid;
        TextView txtprofilecast;
        TextView txtprofileage;
        TextView txtprofileplace;
    }
}

如何将适配器设置为ListView:

CustomAdapter adapter = new CustomAdapter(getActivity(),aList);
setListAdapter(adapter);
 类似资料:
  • 问题内容: 我是Android开发的新手,正在使用JSON解析方法解析数据,使用List Fragment扩展了类,并且希望将数据显示在列表视图中,但是问题是除图像外,我获取的所有数据都非常完美,我没有不知道该怎么解决,我的回答是这样的 问题答案: 尝试使用自定义适配器的AndroidQuery: 如何将适配器设置为ListView:

  • 接口说明 获取标注图片列表 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /wish3dearth/api/scene/marker/v1.0.0/list 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN 响应字段说明 无 响应成功示例 {

  • 接口说明 获取标注图片列表 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /wish3dearth/api/scene/marker/v1

  • 我有一个片段,我想创建一个自定义列表视图,但当我发送参数到适配器,它给我的错误。 这是我的代码片段.. 这是我的Mainhome.java 我的错误是...

  • 我有一个抽屉布局片段(在主活动中),它显示了一个可扩展的列表,当我点击扩展项目的子项时,会出现一个弹出窗口。这个具有自定义布局的弹出窗口包含文本视图、列表视图和2个按钮。 我给列表视图提供了id:,并在onCreateView函数中从视图组返回空值,如下所示: 并使类扩展的片段不是列表片段 我执行了前面的3个步骤,以避免出现“Content has view with id attribute'a

  • 问题内容: 我想用动态表创建Jasper报告。 例如: 用户1-5张桌子 用户2-3张桌子 用户3-6桌 我尝试使用列表选项,但是我的表不可见,并且页面数正在增加。 杰森数据。 是我的报表数据集,是列表数据,也是我要在表中显示的数据。 注意 如果我删除 并把 然后,使用空值创建两个表。 问题答案: 对主报表的查询将其保留为空白(并保留mainDataSet节点) 将字段定义为 该传递给 因此指向