安卓 牛刀初试

前言

因工作需要,学了点安卓知识。现在已经能写点简单页面,解析数据并展示,但是老是忘记,卡壳。特整理一下并记录要点。

正题

一、所需框架

1.okHttp  网络请求
2.Gson   字符串转Json
3.GsonFormat  Json转Bean
4.Glide 加载图片

二、特殊配置
由于我这里用到的是http请求 需要特殊配置

manifest 文件添加配置

   //允许网络访问
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
 // http请求需额外设置网络安全配置
 <application
        android:networkSecurityConfig="@xml/net_work_config"                  
        .../>
//新建net_work_config文件 配置明文访问权限
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

三、进入正题

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

    /*初始化数据*/
    private void initData() {
        okHttpClient = new OkHttpClient();
        //1.创建请求
        Request request = new Request.Builder().url("http://v.juhe.cn/toutiao/index?key=160f6a145f32d7c5410a2437923e01ea").build();
        Call call = okHttpClient.newCall(request);
        //2.异步发送请求
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                Log.i("test",e.getMessage());
            }

            //2.1  数据处理      
            @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;
    //构造函数
    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);
    }

    //填充展示数据
    @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);
        
        //监听点击事件
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,"点击了"+position+"行",Toast.LENGTH_LONG).show();
            }
        });
    }
    
    @Override
    public int getItemCount() {
        return dataBeans.size();
    }

    //MyViewHolder 处理   将MyViewHolder持有控件 和home_recycler内部控件一一关联
    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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容