安卓开发学习——day10

Volley

1.简介:

Volley是一个网络通信框架,适合进行数据量不大但是通信频繁的网络操作,不适用于数据量比较大的网络操作。

2.使用

(1).添加依赖

(2).清单文件里授权访问因特网

(3).代码

package net.tyao.download_image_by_volley;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.LruCache;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.Volley;

public class MainActivity extends AppCompatActivity {
    
    

    private EditText edtImageUrl; // 网址编辑框
    private ImageView ivImage; // 显示网络图片的图像控件
    private RequestQueue mRequestQueue; // 请求队列

    private ImageLoader imageLoader;
    private ImageLoader.ImageListener imageListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 通过资源标识符获取控件实例
        edtImageUrl = findViewById(R.id.edtImage);
        ivImage = findViewById(R.id.ivImage);

        // 创建请求队列
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    /**
     * 下载按钮单击事件处理方法
     *
     * @param view
     */
    public void doDownload(View view) {
    
    
        // 获取用户输入的网址
        String strImageUrl = edtImageUrl.getText().toString();
        // 网址非空校验
        if (strImageUrl.length() == 0) {
    
    
            Toast.makeText(getApplicationContext(), "请输入网址", Toast.LENGTH_SHORT).show();
            edtImageUrl.requestFocus();
            return;
        }
        //创建图像加载器对象
        imageLoader = new ImageLoader(mRequestQueue,new BitmapCache());
        //获取图像监听器对象
        imageListener = imageLoader.getImageListener(
          ivImage,
          R.drawable.ic_launcher_background,
          android.R.drawable.ic_delete
        );
        imageLoader.get(strImageUrl, imageListener);

    }

    class BitmapCache implements ImageLoader.ImageCache {
    
    
        private LruCache<String, Bitmap> mCache;

        public BitmapCache() {
    
    
            int maxSize = 10 * 1024 * 1024;
            mCache = new LruCache<String, Bitmap>(maxSize) {
    
    
                @Override
                protected int sizeOf(String key, Bitmap bitmap) {
    
    
                    return bitmap.getRowBytes() * bitmap.getHeight();
                }
            };
        }

        @Override
        public Bitmap getBitmap(String url) {
    
    
            return mCache.get(url);
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
    
    
            mCache.put(url, bitmap);
        }
    }

    /**
     * 清空单击事件处理方法
     *
     * @param view
     */
    public void doClear(View view) {
    
    
        // 清空网址编辑框
        edtImageUrl.setText("");
        // 清空图像控件内容
        ivImage.setImageBitmap(null);
        // 让网址编辑框获取焦点
        edtImageUrl.requestFocus();
    }
}

(4).效果:

更多


JSONObject

1.使用

(1).读取解析JSON

package net.tyao.gson;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {
    
    

    private TextView tvContent;
    private String content;

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

        tvContent = findViewById(R.id.tvContent);
    }

    /***
     * 读取JSOn
     * @param view
     */
    public void doReadJSON(View view) {
    
    
        try {
    
    
            //读取assets目录下的文件,获取字节输出流
            InputStream is = getResources().getAssets().open("textbook.json");
            //获取字节输出流长度
            int length = is.available();
            //定义字节缓冲区
            byte[] buffer = new byte[length];
            //读取字节输出流,将数据保存在字节缓冲区
            is.read(buffer);
            //将字节缓冲区的数据转换为字符串
            content = new String(buffer, "utf-8");
            //将字符串写入标签
            tvContent.setText(content);
            //关闭字节流
            is.close();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    public void doParseJSON(View view) {
    
    
        if (content == null) {
    
    
            Toast.makeText(this,"请先读取JSON",Toast.LENGTH_LONG).show();
        } else {
    
    
            try {
    
    
                tvContent.setText("");
                JSONArray jsonArray = new JSONArray(content);

                for (int i = 0; i < jsonArray.length(); i++) {
    
    
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    String id = jsonObject.getString("id");
                    String name = jsonObject.getString("name");
                    String press = jsonObject.getString("press");
                    String author = jsonObject.getString("author");
                    String price = jsonObject.getString("price");

                    String book = "编号:" + id + "\n书名:《" + name + "》\n出版社:"
                            + press + "\n作者:" + author + "\n价格:" + price;

                    tvContent.append(book);

                    tvContent.setTextColor(Color.RED);
                }
            } catch (JSONException e) {
    
    
                e.printStackTrace();
            }
        }
    }
}

(3).效果:


GSON

总结:

今天简单的了解了下Volley和jsonObject这些,能够使我在用客户端访问网络和解析json,由于时间的问题,Gson只有明天学习,然后完成访问接口实现数据显示。

猜你喜欢

转载自blog.csdn.net/weixin_45936162/article/details/112969330