【问题标题】:Getting an image from Url in Android从 Android 中的 Url 获取图像
【发布时间】:2019-08-16 04:07:17
【问题描述】:

我正在尝试从存储在表格中的 url 获取图像,但是当我尝试获取图像时,ImageView 不包含任何内容,它只是空白。

在下面的代码中,我使用了毕加索来获取图片:

public class Imageoffam extends AppCompatActivity {
private boolean success = false; // boolean
private ConnectionClass connectionClass;
public TextView tmtmt;
public ImageView dede;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_imageoffam);
    getSupportActionBar().hide();
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    tmtmt = (TextView) findViewById(R.id.tomato) ;
    dede = (ImageView) findViewById(R.id.dededede);
    connectionClass = new ConnectionClass();

    SyncData orderData = new SyncData();
    orderData.execute("");
}

private class SyncData extends AsyncTask<String, String, String> {
    String msg = "Success";
    ProgressDialog progress;

    @Override
    protected void onPreExecute() {
        progress = ProgressDialog.show(Imageoffam.this, "Synchronising",
                "Please Wait...", true);
    }

    @Override
    protected String doInBackground(String... strings) {
        try {
            Connection conn = connectionClass.CONN();
            if (conn == null) {
                msg = "Please Check Your Connection";
                success = false;
            } else {

                String dta = getIntent().getStringExtra("blala");
                String query = "SELECT Images.Fimage,family.FName,family.FInfo,family.CID FROM Images INNER JOIN family ON family.FID = Images.FID WHERE family.FInfo = (N'" +dta+ "')";
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(query);

                while (rs.next()) {
                    try { 
                        Picasso.with(Imageoffam.this).load(rs.getString("Fimage")).into(dede);

                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
            Writer writer = new StringWriter();
            e.printStackTrace(new PrintWriter(writer));
            msg = writer.toString();
            success = false;

        }
        return msg;
    }

    @Override
    protected void onPostExecute(String msg) {
        progress.dismiss();
        Toast.makeText(Imageoffam.this, msg + "", Toast.LENGTH_LONG).show();
        if (success == false) {
        } else {
            try {

            } catch (Exception ex) {

            }

        }
    }
}

虽然它没有在 ImageView 中显示图像,但它没有给出任何错误消息。

谁能告诉我我做错了什么?

任何帮助将不胜感激。

【问题讨论】:

    标签: java android sql


    【解决方案1】:

    如果您将图像 uri 存储在 db 中,您需要通过以下方式在 ImageView 上设置 uri imageView.setImageUri(uri); 从 db 获取 uri 后

    【讨论】:

    • 对不起,我无法理解你,我在哪里放 imageView.setImageUri(uri);
    • 你使用Picasso所以你可以直接在Picasso中获取uri并传递Picasso.with(context).load(uri).into(dede);
    【解决方案2】:

    使用 Picasso 时,不需要 AsyncTask,只需:

    Picasso.with(context).load(imageUri).into(ivBasicImage);
    

    例如:

    String imageUri = "https://i.imgur.com/tGbaZCY.jpg";
    ImageView ivBasicImage = (ImageView) findViewById(R.id.ivBasicImage);
    Picasso.with(context).load(imageUri).into(ivBasicImage);
    

    你也可以试试Glide:

    Glide.with(context).load(url).into(imageView);
    

    【讨论】:

    • 很好,但是什么是片段?
    • 只需从代码中删除它并删除您调用它的代码。
    • 当我这样做时无法删除它,它给了我错误,第一个错误出现在 orderData.execute("");,第二个错误出现在 @overide,我该怎么办?
    • 去掉 SyncData 类和最后两行 onCreate() 函数
    • 但是当我这样做时什么都没有发生!
    【解决方案3】:

    而不是毕加索的方法, 我推荐本地的webview方法。

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2016-01-05
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      相关资源
      最近更新 更多