安卓 牛刀初試

前言

因工作需要,學(xué)了點(diǎn)安卓知識(shí)。現(xiàn)在已經(jīng)能寫點(diǎn)簡(jiǎn)單頁面,解析數(shù)據(jù)并展示,但是老是忘記,卡殼。特整理一下并記錄要點(diǎn)。

正題

一、所需框架

1.okHttp  網(wǎng)絡(luò)請(qǐng)求
2.Gson   字符串轉(zhuǎn)Json
3.GsonFormat  Json轉(zhuǎn)Bean
4.Glide 加載圖片

二、特殊配置
由于我這里用到的是http請(qǐng)求 需要特殊配置

manifest 文件添加配置

   //允許網(wǎng)絡(luò)訪問
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
 // http請(qǐng)求需額外設(shè)置網(wǎng)絡(luò)安全配置
 <application
        android:networkSecurityConfig="@xml/net_work_config"                  
        .../>
//新建net_work_config文件 配置明文訪問權(quán)限
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

三、進(jìn)入正題

  • Activity 核心代碼
public class HomeActivity extends AppCompatActivity {
    private OkHttpClient okHttpClient;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        initData();
    }

    /*初始化數(shù)據(jù)*/
    private void initData() {
        okHttpClient = new OkHttpClient();
        //1.創(chuàng)建請(qǐng)求
        Request request = new Request.Builder().url("http://v.juhe.cn/toutiao/index?key=160f6a145f32d7c5410a2437923e01ea").build();
        Call call = okHttpClient.newCall(request);
        //2.異步發(fā)送請(qǐng)求
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                Log.i("test",e.getMessage());
            }

            //2.1  數(shù)據(jù)處理      
            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                //2.2 Json反序列化
                Gson gson = new Gson();
                NewsBean newsBean = gson.fromJson(response.body().string(),NewsBean.class);
                //2.3 刷新UI
                HomeActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        RecyclerView rv = findViewById(R.id.rv);
                        rv.setLayoutManager(new LinearLayoutManager(HomeActivity.this));
                        rv.setAdapter(new MyHomeAdapter(newsBean.getResult().getData(),HomeActivity.this));
                    }
                });
            }
        });
    }
}
  • Adapter 核心代碼
public class MyHomeAdapter extends RecyclerView.Adapter<MyHomeAdapter.MyViewHolder> {

    private List<NewsBean.ResultBean.DataBean> dataBeans;
    private Context context;
    //構(gòu)造函數(shù)
    public MyHomeAdapter(List<NewsBean.ResultBean.DataBean> dataBeans, Context context) {
        this.dataBeans = dataBeans;
        this.context = context;
    }

    //將home_recycler綁定給MyViewHolder
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = View.inflate(context,R.layout.home_recycler,null);
        return new MyViewHolder(view);
    }

    //填充展示數(shù)據(jù)
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) {
        NewsBean.ResultBean.DataBean dataBean = dataBeans.get(position);
        holder.tv_title.setText(dataBean.getTitle());
        holder.tv_desc.setText(dataBean.getAuthor_name() + "        " +dataBean.getDate());
        Glide.with(context).load(dataBean.getThumbnail_pic_s()).into(holder.iv);
        
        //監(jiān)聽點(diǎn)擊事件
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,"點(diǎn)擊了"+position+"行",Toast.LENGTH_LONG).show();
            }
        });
    }
    
    @Override
    public int getItemCount() {
        return dataBeans.size();
    }

    //MyViewHolder 處理   將MyViewHolder持有控件 和home_recycler內(nèi)部控件一一關(guān)聯(lián)
    protected class MyViewHolder extends RecyclerView.ViewHolder{

        private ImageView iv;
        private TextView tv_title;
        private TextView tv_desc;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            this.iv =  itemView.findViewById(R.id.iv);
            this.tv_title =  itemView.findViewById(R.id.tv_title);
            this.tv_desc =  itemView.findViewById(R.id.tv_desc);
        }
    }
}
  • Bean 的處理
通過GsonFormat  生成 Bean代碼

四、成品展示

1.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容