Android studio将图片网址加载到listview中

时间:2016-06-05 13:56:22

标签: android android-studio asynchronous bitmap phpmyadmin

我想用文字和图片填充列表视图。 我通过我的mysql数据库以JSON格式接收这些信息。 我有一个名为" FOTO"我将照片的路径存储到这里:" http://....../1.png"。

我使用此代码得到android.os.NetworkOnMainThreadException,但我不知道如何做到不同。

我解析JSON并将值传递给listadapter。我还需要传递图标以使位图值,但我需要从服务器下载它。

public class DisplayListView extends AppCompatActivity {
    final static String TAG = "sb.dl";
    String json_string;
    JSONObject jsonObject;
    JSONArray jsonArray;
    TeamAdapter teamAdapter;
    ListView listView;
    Bitmap icon = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.display_listview_layout);

        teamAdapter = new TeamAdapter(this, R.layout.row_layout);
        listView = (ListView) findViewById(R.id.listview);
        listView.setAdapter(teamAdapter);

        json_string = getIntent().getExtras().getString("json_data");
        Log.d(TAG, "json_string " + json_string);

        try {
            jsonObject = new JSONObject(json_string);
            jsonArray = jsonObject.getJSONArray("risposta");
            int count = 0;

            String nome, num, data;

            while (count < jsonArray.length()) {
                JSONObject JO = jsonArray.getJSONObject(count);
                nome = JO.getString("NOME");
                num = JO.getString("NUMERO");
                data = JO.getString("DATA_NASCITA");
                String url = JO.getString("FOTO");

                icon = LoadImageFromWebOperations(url);

                Team team = new Team(nome, num, data, icon);
                teamAdapter.add(team);

                count++;
            }

        } catch (JSONException e) {
            e.printStackTrace();
            Log.d("Simone", e.toString());
            Log.d("Simone", e.getMessage());
        }
    }

    public static Bitmap LoadImageFromWebOperations() {
        try {
            URL url = new URL("url");
            Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            return bmp;
        } catch (Exception e) {
            Log.d(TAG, "bitmap error: " + e.toString());
            Log.d(TAG, "bitmap error: " + e.getMessage());
            return null;
        }
    }

}

2 个答案:

答案 0 :(得分:3)

尝试使用毕加索加载您的图片。

http://square.github.io/picasso/

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

这会将图像异步加载到您的imageview中。

使用gradle import

获取库
compile 'com.squareup.picasso:picasso:2.5.2'

答案 1 :(得分:2)

我遇到了同样的问题。 我用下载位图的AsyncTask解决了。

我使用了这段代码:

class ImageDownloaderTask extends AsyncTask<String, Void, Bitmap> {

    private final WeakReference<ImageView> imageViewReference;

    public ImageDownloaderTask(ImageView imageView) {
        imageViewReference = new WeakReference<ImageView>(imageView);
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        return downloadBitmap(params[0]);
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (isCancelled()) {
            bitmap = null;
        }

        if (imageViewReference != null) {
            ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                if (bitmap != null) {
                    imageView.setImageBitmap(bitmap);
                } else {
                    Drawable placeholder = null;
                    imageView.setImageDrawable(placeholder);
                }
            }
        }
    }

    private Bitmap downloadBitmap(String url) {
        HttpURLConnection urlConnection = null;
        try {
            URL uri = new URL(url);
            urlConnection = (HttpURLConnection) uri.openConnection();

            final int responseCode = urlConnection.getResponseCode();
            if (responseCode != HttpURLConnection.HTTP_OK) {
                return null;
            }

            InputStream inputStream = urlConnection.getInputStream();
            if (inputStream != null) {
                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                return bitmap;
            }
        } catch (Exception e) {
            urlConnection.disconnect();
            Log.w("ImageDownloader", "Errore durante il download da " + url);
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
        }
        return null;
    }
}

你叫它:

new ImageDownloaderTask(holder.imageView).execute(urlPhoto);

希望这有帮助:)