android - 如何在 asynctask onPostExecute 上从服务器的 imageview 上显示图像?

标签 android mysql bitmap android-asynctask

我的 mysql 中有一个文章表,每篇文章都有一个图像。

**article_id**    **article_image**
00001         display/Article1image.png
00002         display/Article2image.jpg
00003         display/Article3image.jpg
00004         display/Article4image.png

假设我正在使用不同的 View (例如article_content、article_writer、date_published 等)在线性布局上打印所有文章信息...,并且我想在以编程方式创建的ImageView 上显示article_image

假设`"www.sampleweb.com/"+_jsonObject.optString("article_image").toString()'是来自服务器的图像的完整链接。

这是我的完整代码,如何使用上述图像网址的内容创建 ImageView ?

@Override
    public void onPostExecute(String result) {
        //headlinehead.setText(result);
        try{
            JSONObject jsonRootObj = new JSONObject(result);
            JSONArray jsonArray = jsonRootObj.optJSONArray("Data");
            JSONObject jsonObject = jsonArray.getJSONObject(0);
            //code for headline
            this.headlinehead.setText(jsonObject.optString("title").toString());
            this.shortdesc.setText(jsonObject.optString("shortdesc").toString());
            this.headlinesender.setText(jsonObject.optString("penname").toString());
            this.img.setTag(jsonObject.optString("id").toString());
            //code for headline
            for (int p = 1; p < jsonArray.length(); p++){
                JSONObject _jsonObject = jsonArray.getJSONObject(p);
                LinearLayout conteach = new LinearLayout(getActivity().getApplicationContext());
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                conteach.setLayoutParams(lp);
                conteach.setOrientation(LinearLayout.VERTICAL);

                TextView art_title = new TextView(getActivity().getApplicationContext());
                art_title.setText(_jsonObject.optString("title").toString());
                art_title.setTextSize(20);
                art_title.setLayoutParams(new LayoutParams(350,LayoutParams.WRAP_CONTENT));

                TextView art_shortdesc = new TextView(getActivity().getApplicationContext());
                art_shortdesc.setText(_jsonObject.optString("shortdesc").toString());
                art_shortdesc.setTextSize(14);
                art_shortdesc.setTypeface(null, Typeface.ITALIC);
                art_shortdesc.setLayoutParams(new LayoutParams(350,LayoutParams.WRAP_CONTENT));

                TextView art_sender = new TextView(getActivity().getApplicationContext());
                art_sender.setText("Written by: " + _jsonObject.optString("sender").toString());
                art_sender.setTextSize(14);
                art_sender.setLayoutParams(new LayoutParams(350,LayoutParams.WRAP_CONTENT));
                art_sender.setPadding(0, 0, 0, 15);


                conteach.addView(art_title);
                conteach.addView(art_shortdesc);
                conteach.addView(art_sender);
                conteach.setTag(_jsonObject.optString("id").toString());
                conteach.setClickable(true);
                conteach.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        SpecificArticleFragment spcf = new SpecificArticleFragment();
                        Bundle args = new Bundle();
                        args.putString("art_id", v.getTag().toString());
                        spcf.setArguments(args);

                        FragmentManager ft = getFragmentManager();
                        ft.beginTransaction().replace(R.id.content_frame, spcf).commit();
                    }
                 });                
                this.llist.addView(conteach);

            }
            this.pbColBul.setVisibility(ProgressBar.GONE);
        } catch(JSONException e){

        }
    }

最佳答案

以编程方式创建 ImageView,就像使用 Textview 一样。使用 Picasso 将 url 加载到其中。它做得很好 并为您提供一些有用的方法,并在图像完成开箱即用时提供淡入效果。
至于JSON解析,我推荐使用RetrofitOkHttp客户。这比您的实现容易得多。另外,Retrofit 可以在后台进行 API 调用,因此,删除 AsyncTask

关于android - 如何在 asynctask onPostExecute 上从服务器的 imageview 上显示图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862888/

相关文章:

php - 在产品页面上显示可用库存数量

c++ - 将位图缩小到所需尺寸

android - 在 OnCompletionListener 中使用 MediaPlayer get 添加对象

android - 从 Android 应用程序调用 Web 服务

MySQL 查询删除位于 ExpressionEngine 中的三个表中的 200,000 个垃圾邮件成员

android - 如何将 Qt Android 应用程序连接到 MySQL 服务器?

c++ - 如何使用 GDI API 在 windows 桌面上绘图?

Android robolectric 单元测试从 drawable 加载位图

java - 无法从 ArrayList 创建 ArrayAdaptor

android - AlertDialog 按钮未包装在 Lollipop 中