国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】

這篇具有很好參考價值的文章主要介紹了Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現(xiàn)網絡加載商品數(shù)據(jù)的功能:

1、在AndroidManifest.xml中聲明網絡權限;

2、在app/build.gradle中添加okhttp, glide, gson等必需的第3方庫;

3、在MainActivity中通過OkHttpClient連接給定的Web服務,獲取商品數(shù)據(jù);對應的json數(shù)據(jù)為本地的json文件,名字為goods_list_data.json;數(shù)據(jù)內容為:[
{“id”:1,“count”:“5.4萬”,“goodsName”:“富士拍立得相機”,“goodsPic”:“/img/polaroid.png”},
{“id”:2,“count”:“5.3萬”,“goodsName”:“格蘭仕微波爐”,“goodsPic”:“/img/microwave_oven.png”},
{“id”:3,“count”:“1.4萬”,“goodsName”:“新國標電動車”,“goodsPic”:“/img/electric_vehicle.png”},
{“id”:4,“count”:“1.6萬”,“goodsName”:“官方訂制投影儀”,“goodsPic”:“/img/projector.png”},
{“id”:5,“count”:“0.4萬”,“goodsName”:“美的35L烤箱”,“goodsPic”:“/img/oven.png”},
{“id”:6,“count”:“3.3萬”,“goodsName”:“兒童學習桌”,“goodsPic”:“/img/learning_table.png”}
]
對應的圖片也存儲在本地的img文件中

4、使用gson庫解析JSON格式的商品數(shù)據(jù),轉成java bean商品數(shù)據(jù)對象(Goods類)的列表;

5、創(chuàng)建MsgHandler類,用于異步更新商品列表;

6、在GoodsAdapter中通過glide控件加載并顯示網絡圖片。


1.部署網絡圖片資源

首先,我們需要將對應的文件部署在一個簡易的服務器(Tomcat)中,服務器中存放數(shù)據(jù)的目錄結構如下圖所示

E:.
├─goods
│  └─img
│  └─goods_list_data.json
└─WEB-INF

其中,ROOT目錄在"apache-tomcat-9.0.65-windows-x64\webapps\ROOT"下,表示Tomcat服務器的根目錄。

  • goods文件夾存放的是商品列表所用到的數(shù)據(jù)
  • 其中goods\img文件夾存放的是商品的圖片資源
  • goods_list_data.json文件存放的是商品列表的數(shù)據(jù),具體如下所示
[
  {"id":1,"count":"5.4萬","goodsName":"富士拍立得相機","goodsPic":"/img/polaroid.png"},
  {"id":2,"count":"5.3萬","goodsName":"格蘭仕微波爐","goodsPic":"/img/microwave_oven.png"},
  {"id":3,"count":"1.4萬","goodsName":"新國標電動車","goodsPic":"/img/electric_vehicle.png"},
  {"id":4,"count":"1.6萬","goodsName":"官方訂制投影儀","goodsPic":"/img/projector.png"},
  {"id":5,"count":"0.4萬","goodsName":"美的35L烤箱","goodsPic":"/img/oven.png"},
  {"id":6,"count":"3.3萬","goodsName":"兒童學習桌","goodsPic":"/img/learning_table.png"}
]

啟動tomcat后,可訪問http://localhost:8080/goods/goods_list_data.json展示信息
Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp

2.創(chuàng)建項目

  1. 打開Android Studio,并創(chuàng)建一個新的Android項目。
  2. 命名項目并選擇適當?shù)哪繕薃PI級別和設備類型。
  3. 創(chuàng)建一個新的空白活動(Empty Activity)。

3.在AndroidManifest.xml中聲明網絡權限

在 AndroidManifest.xml 文件中添加以下權限聲明,以便應用可以訪問網絡:

<uses-permission android:name="android.permission.INTERNET" />

Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp由于網絡安全策略導致的問題,即不允許在明文(非加密)的情況下與 localhost 進行通信。這通常涉及到網絡安全配置,特別是在 Android 9.0(API級別28)及更高版本中引入了更嚴格的網絡安全策略;因此我們還需要進行配置網絡安全配置文件

解決此問題的方法之一是使用 HTTPS 協(xié)議而不是 HTTP,因為 HTTPS 是加密的。

如果在本地測試應用,可以使用 Android 的網絡安全配置文件來允許明文通信。

  1. res/xml 文件夾中創(chuàng)建一個名為 network_security_config.xml 的網絡安全配置文件。如果該文件夾不存在,請手動創(chuàng)建。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>

Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp

  1. AndroidManifest.xml 文件中,將這個網絡安全配置文件應用于你的應用。在 <application> 元素內添加 android:networkSecurityConfig 屬性,如下所示:
<application
    android:networkSecurityConfig="@xml/network_security_config"
    <!-- 其他屬性和元素 -->
    >
    <!-- 其他元素 -->
</application>

Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp

這將允許你的應用在本地開發(fā)和測試過程中與 localhost 進行明文通信。但請注意,在生產環(huán)境中,強烈建議使用 HTTPS 以確保數(shù)據(jù)的安全傳輸。

如果你使用的是模擬器或真機設備,請確保重新構建和部署應用,以使配置生效。此外,如果你的服務器正在本地運行,請確保服務器端口和地址正確。

4.添加依賴庫

app/build.gradle文件中添加OkHttp、Glide、Gson依賴庫。

    implementation("com.squareup.okhttp3:okhttp:4.9.1")
    implementation("com.squareup.okhttp3:logging-interceptor:4.9.1")
    implementation("com.google.code.gson:gson:2.8.8")
    implementation("com.github.bumptech.glide:glide:4.12.0")
    annotationProcessor("com.github.bumptech.glide:compiler:4.12.0")

Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp

進行同步
Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp
等待安裝依賴……

5.創(chuàng)建一個XML布局文件

res/layout文件夾中創(chuàng)建一個布局文件,例如activity_main.xml,用于顯示商品數(shù)據(jù)。

<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"/>

Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp
創(chuàng)建一個XML布局文件用于顯示商品項
res/layout文件夾中創(chuàng)建一個布局文件,例如item_goods.xml,用于顯示每個商品項。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <ImageView
        android:id="@+id/goodsImageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="centerCrop" />

    <TextView
        android:id="@+id/goodsNameTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp" />
</LinearLayout>

Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp

6.創(chuàng)建一個Java Bean類

創(chuàng)建一個Goods類,用于表示商品數(shù)據(jù)。

public class Goods {
    private int id;
    private String count;
    private String goodsName;
    private String goodsPic;

    // Getters and setters
}

7.創(chuàng)建一個適配器類

創(chuàng)建一個自定義適配器類GoodsAdapter,用于將商品數(shù)據(jù)綁定到RecyclerView中。

public class GoodsAdapter extends RecyclerView.Adapter<GoodsAdapter.ViewHolder> {
    private List<Goods> goodsList;
    private Context context;

    public GoodsAdapter(Context context, List<Goods> goodsList) {
        this.context = context;
        this.goodsList = goodsList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_goods, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Goods goods = goodsList.get(position);
        holder.goodsNameTextView.setText(goods.getGoodsName());

        // Load and display image using Glide
        Glide.with(context)
            .load(goods.getGoodsPic())
            .into(holder.goodsImageView);
    }
    @Override
    public int getItemCount() {
        if (goodsList != null) {
            return goodsList.size();
        } else {
            return 0; // 返回0表示沒有數(shù)據(jù)
        }
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView goodsNameTextView;
        ImageView goodsImageView;

        ViewHolder(View itemView) {
            super(itemView);
            goodsNameTextView = itemView.findViewById(R.id.goodsNameTextView);
            goodsImageView = itemView.findViewById(R.id.goodsImageView);
        }
    }
}

8.實現(xiàn)網絡加載數(shù)據(jù)

MainActivity.java中實現(xiàn)網絡加載商品數(shù)據(jù)的功能。請確保你的goods_list_data.json文件位于app/src/main/assets文件夾下。

package com.leo.network;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.gson.Gson;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private GoodsAdapter adapter;
    private List<Goods> goodsList;

    private static final int MSG_UPDATE_DATA = 1;
    private Handler msgHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            if (msg.what == MSG_UPDATE_DATA) {
                adapter.notifyDataSetChanged();
            }
            return true;
        }
    });

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

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new GoodsAdapter(this, goodsList);
        recyclerView.setAdapter(adapter);

        // Fetch data from the network
        fetchGoodsData();
    }

    private void fetchGoodsData() {

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();
                    Request request = new Request.Builder()
                            .url("http://10.0.2.2:8080/goods/goods_list_data.json")
                            .build();
                    Response response = client.newCall(request).execute();
                    if (response.isSuccessful()) {
                        String jsonData = response.body().string();
                        Log.d("Network", "Data fetched successfully: " + jsonData);

                        Gson gson = new Gson();
                        Goods[] goodsArray = gson.fromJson(jsonData, Goods[].class);

                        // 補全圖片URL
                        for (Goods goods : goodsArray) {
                            goods.setGoodsPic("http://10.0.2.2:8080//goods" + goods.getGoodsPic());
                        }

                        goodsList = Arrays.asList(goodsArray);
                        msgHandler.sendEmptyMessage(MSG_UPDATE_DATA);

                        // 切換到主線程以更新UI
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                // 設置RecyclerView的適配器
                                adapter = new GoodsAdapter(MainActivity.this, goodsList);
                                recyclerView.setAdapter(adapter);
                            }
                        });

                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.e("Network", "Error fetching data: " + e.getMessage());
                }
            }
        }).start();
    }
}


替換"URL_TO_YOUR_JSON_DATA"為你的本地JSON文件的路徑,例如:http://localhost:8080/goods/goods_list_data.json。

注意,如果你是本地部署的tomcat,需要在Android默認的虛擬器中訪問,需要改為“10.0.2.2

以下是對代碼的一些說明:

  1. fetchGoodsData() 方法中創(chuàng)建了一個新的線程來執(zhí)行網絡請求。這是一個良好的實踐,因為它確保網絡請求不會阻塞主線程,以避免應用的響應性問題。

  2. 在網絡請求成功后使用 Gson 庫將 JSON 數(shù)據(jù)解析為 Goods 對象的數(shù)組,并補全了圖片的URL。這確保了 Glide 能夠正確加載圖片。

  3. 使用 Handler 來更新UI,因為 UI更新必須在主線程中執(zhí)行。

  4. 在網絡請求失敗時,通過 Log.e 打印了錯誤消息,這有助于調試和問題排查。

實現(xiàn)效果
Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】,Android,android,網絡,okhttp文章來源地址http://www.zghlxwxcb.cn/news/detail-721233.html

到了這里,關于Android應用:實現(xiàn)網絡加載商品數(shù)據(jù)【OKHttp、Glide、Gson】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Android 加載gif圖,Glide

    個人中心 DownLoad Android 可以使用 Glide、Picasso、Fresco 等第三方庫來加載 gif 圖。 以 Glide 為例,可以按照以下步驟加載 gif 圖: 1. 在 build.gradle 文件中添加 Glide 的依賴: ``` dependencies { ? ? implementation \\\'com.github.bumptech.glide:glide:4.12.0\\\' ? ? annotationProcessor \\\'com.github.bumptech.glide:compil

    2024年02月14日
    瀏覽(21)
  • Android Glide預加載RecyclerViewPreloader,ViewPreloadSizeProvider,kotlin

    Android Glide預加載RecyclerViewPreloader,ViewPreloadSizeProvider,kotlin ? ? ? ? ? ? ? ? ? ? ? ? ? Android Glide自定義AppGlideModule,讓Glide在app啟動后基于定制化GlideModule加載,kotlin_zhangphil的博客-CSDN博客 在實際的開發(fā)中,雖然Glide解決了快速加載圖片的問題,但還有一個問題懸而未決:比

    2024年02月15日
    瀏覽(23)
  • 【Android】Glide加載SVG,SVG轉PNG

    Dependency SvgDecoder 負責解碼SVG資源 SvgTranscoder 負責將SVG轉為Android的Drawable或Bitmap SvgModule 注冊Glide自定義插件 GlideApp 編譯會生成一個GlideApp,用它來取代默認的Glide加載資源即可

    2024年04月09日
    瀏覽(71)
  • Glide - Android的圖像加載和緩存庫,專注于平滑滾動

    GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling An image loading and caching library for Android focused on smooth scrolling Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a si

    2024年02月07日
    瀏覽(21)
  • Android使用Glide類加載服務器中的圖片

    Glide類用于從服務器中獲取圖片并加載進ImageView。 一、添加依賴 Glide為 第三方框架 ,使用時需添加依賴: 在 Gradle Scripts / build.gradle(Module:app) / dependencies方法 中添加 添加后會下載。 二、獲取權限 獲取服務器中的圖片需要 申請(靜態(tài)聲明)網絡權限 ,在清單文件中添加 三、

    2024年02月06日
    瀏覽(26)
  • Android Glide自定義AppGlideModule,讓Glide在app啟動后基于定制化GlideModule加載,kotlin

    Android Glide自定義AppGlideModule,讓Glide在app啟動后基于定制化GlideModule加載,kotlin ? project的build.gradle: ? ? app的build.gradle: ? ? ? 注解定義GlideModule ? 重新build項目。此后在項目代碼中使用:GlideApp.? 替代? Glide.? 加載load圖即可,自定義module就會觸發(fā)使用。 ? ? ? ? ? Android圖

    2024年02月13日
    瀏覽(25)
  • Android GridLayoutManager Glide批量加載Bitmap繪制Canvas畫在RecyclerView,Kotlin(a)

    有一個遺留問題,每行加載16張圖片,以行為原子單位。后面可以考慮另外一種實現(xiàn),group分組標簽單獨占一行,圖片可以一大片一大片的占據(jù)多行,每行16張。 Android Glide自定義AppCompatImageView切分成若干小格子,每個小格子onDraw繪制Bitmap,Kotlin(1)_android appcompatimageview-CSDN博

    2024年04月17日
    瀏覽(22)
  • Android優(yōu)化RecyclerView圖片展示:Glide成堆加載批量Bitmap在RecyclerView成片繪制Canvas,Kotlin(b)

    對?Android GridLayoutManager Glide批量加載Bitmap繪制Canvas畫在RecyclerView,Kotlin(a)-CSDN博客 改進,用Glide批量把Bitmap加載出來,然后在RecyclerView成片成堆的繪制Canvas,此種實現(xiàn)是RecyclerView加載多宮格圖片展示,卡頓丟幀最低的一種實現(xiàn),上下滑動流暢。 Android GridLayoutManager Glide批量

    2024年04月25日
    瀏覽(22)
  • Android Glide preload RecyclerView切入后臺不可見再切換可見只加載當前視野可見區(qū)域item圖片,Kotlin

    build.gradle文件: 如果手機圖片很多,假設已經將全部圖片裝入宮格的列表,在快速上下滑動過程中,由于glide會累積每一個圖片的加載任務,如果圖片比較大,上下滑動時間又很長,那么累積任務會很嚴重,導致異常發(fā)生,實現(xiàn)在RecyclerView切入后臺(或不可見)時候,然后再

    2024年02月10日
    瀏覽(23)
  • [Android]網絡框架之OkHttp(詳細)(kotlin)

    [Android]網絡框架之OkHttp(詳細)(kotlin)

    目錄 OkHttp的介紹 添加依賴 OkHttp的使用 get的同步與異步請求 post的同步與異步請求 POST請求的數(shù)據(jù)格式 POST請求上傳文件 POST請求上傳json對象 POST請求上傳多個數(shù)據(jù) OkHttp的配置 1.Builder構建器 2.自定義攔截器 3.自定義緩存 4. 自定義Cookie https://square.github.io/okhttp/ 由Square公司貢獻的

    2024年02月12日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包