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只有明天学习,然后完成访问接口实现数据显示。