安卓開發學習——day10
阿新 • • 發佈:2021-01-22
技術標籤:安卓學習
文章目錄
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只有明天學習,然後完成訪問介面實現資料顯示。