Http请求解析Json与图片(AlertDialog)提示框

这个博客展示了如何在Android中实现Http请求获取JSON数据,并将数据解析存储到SQLite数据库。同时,还详细解释了如何在ListView中展示数据,并在点击列表项时弹出AlertDialog进行删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class HttpActivity extends AppCompatActivity {

    private ListView lv;
    List<Da.ResultBean.ListBean> list;
    private MyHttpSqlite sqlite;
    private MyAdapter adapter;
    private Bitmap bit;

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

        lv = (ListView) findViewById(R.id.lv);
        list = new ArrayList<Da.ResultBean.ListBean>();
        // 实例化工具类
        sqlite = new MyHttpSqlite(this);

        // 异步任务
        new AsyncTask<String, Integer, String>() {

            @Override
            protected void onPostExecute(String s) {
                // 设置适配器
                adapter = new MyAdapter();
                lv.setAdapter(adapter);

                super.onPostExecute(s);
            }

            @Override
            protected String doInBackground(String... strings) {

                // 方法
                getData();

                return null;

            }
        }.execute();

        // 点击弹出AlertDialog删除
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {

                AlertDialog.Builder builder = new AlertDialog.Builder(HttpActivity.this);
                builder.setTitle("警告!");
                builder.setMessage("确定删除吗?");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int j) {

                        delete(list.get(i).getTitle());
                        Toast.makeText(HttpActivity.this, list.get(i).getTitle() + "已删除", Toast.LENGTH_SHORT).show();
                        list.remove(i);
                        adapter.notifyDataSetChanged();

                    }
                });

                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                        Toast.makeText(HttpActivity.this, "取消", Toast.LENGTH_SHORT).show();
                    }
                });

                builder.show();

            }
        });

    }

    // 删除的方法
    private void delete(String title) {

        SQLiteDatabase db = sqlite.getWritableDatabase();
        db.delete("hu", " title = ?", new String[]{title});
        db.close();

    }

    private void getData() {

        // 请求网络资源并解析

        try {
            URL url = new URL("http://169.254.19.1:8080/huhu/weixin.txt");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.setRequestMethod("GET");

            int code = conn.getResponseCode();

            if (code == 200) {
                Gson gson = new Gson();
                Da da = gson.fromJson(new InputStreamReader(conn.getInputStream(), "UTF-8"), Da.class);
                list = da.getResult().getList();
                add(list);
            }

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

    }

    // 把解析的添加到数据库
    public void add(List<Da.ResultBean.ListBean> list) {

        SQLiteDatabase db = sqlite.getWritableDatabase();

        for (int i = 0; i < list.size(); i++) {

            ContentValues valuses = new ContentValues();
            valuses.put("id", list.get(i).getId());
            valuses.put("title", list.get(i).getTitle());
            valuses.put("source", list.get(i).getSource());
            valuses.put("firstImg", list.get(i).getFirstImg());
            valuses.put("url", list.get(i).getUrl());
            db.insert("hu", null, valuses);
            db.close();
        }


    }

    class MyAdapter extends BaseAdapter {

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

        @Override
        public Object getItem(int i) {
            return list.get(i);
        }

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

        @Override
        public View getView(final int i, View view, ViewGroup viewGroup) {

            final ViewHolder holder;
 // 优化
            if (view == null) {
                holder = new ViewHolder();
                view = View.inflate(HttpActivity.this, R.layout.sw_item, null);
                holder.tv_id = view.findViewById(R.id.tv_id);
                holder.tv_title = view.findViewById(R.id.tv_title);
                holder.tv_source = view.findViewById(R.id.tv_source);
                holder.iv = view.findViewById(R.id.iv_firstImg);
                holder.tv_url = view.findViewById(R.id.tv_url);
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }

            holder.tv_id.setText(list.get(i).getId());
            holder.tv_title.setText(list.get(i).getTitle());
            holder.tv_source.setText(list.get(i).getSource());
            new Thread(new Runnable() {
                @Override
                public void run() {
                    final Bitmap image = getImage(list.get(i).getFirstImg());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            holder.iv.setImageBitmap(image);
                        }
                    });
                }
            }) {
            }.start();
            holder.tv_url.setText(list.get(i).getUrl());
            return view;
        }
    }

    // 获取网络图片
    private Bitmap getImage(String path) {

        try {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");

            int code = conn.getResponseCode();
            if (code == 200) {
                // 因为该地址是一个图片的地址,所以返回的数据流就是一个图片的数据流
                // 直接用该图片的数据流 转换成 一个Bitmap
                bit = BitmapFactory.decodeStream(conn.getInputStream());

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return bit;
    }

    class ViewHolder {

        TextView tv_id, tv_title, tv_source, tv_firstImg, tv_url;
        ImageView iv;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值