zoukankan      html  css  js  c++  java
  • 团队冲刺——第七天

    https://www.cnblogs.com/three3/p/12763763.html

    今天学习了Android的四大组件广播和监听部分,遇到困难有些定义不明白,明天帮助优化界面。

    缩写代码:

    package com.androidlearing.tdtreehole.activity;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.text.Editable;
    import android.text.TextUtils;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.androidlearing.tdtreehole.R;
    import com.androidlearing.tdtreehole.adapter.PostAndRepostAdapter;
    import com.androidlearing.tdtreehole.bean.ItemBean;
    import com.androidlearing.tdtreehole.bean.ItemBeanRepost;
    import com.androidlearing.tdtreehole.httputils.HttpUtils;
    import com.androidlearing.tdtreehole.pojo.Data;
    import com.androidlearing.tdtreehole.pojo.Post;
    import com.androidlearing.tdtreehole.pojo.PostAndRepost;
    import com.androidlearing.tdtreehole.pojo.Repost;
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    import com.jcodecraeer.xrecyclerview.CustomFooterViewCallBack;
    import com.jcodecraeer.xrecyclerview.ProgressStyle;
    import com.jcodecraeer.xrecyclerview.XRecyclerView;
    
    import org.jetbrains.annotations.NotNull;
    import org.w3c.dom.Text;
    
    import java.io.IOException;
    import java.lang.reflect.Type;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.Response;
    
    public class RepostActivity extends AppCompatActivity {
    
        private static final String TAG = "RepostActivity";
        private static final int GET_REPORTS = 0;
        private static final int IS_INSERTED = 1;
        private Post mPostForSelf;
        private XRecyclerView mRecyclerView;
        private Handler mHandler;
        private List<ItemBeanRepost> mItemBeanReposts;
        private List<PostAndRepost> mPostAndReposts = new ArrayList<>();
        private PostAndRepostAdapter mAdapter;
        private EditText mRepostContent;
        private Button mAnswerBtn;
        private View mView;
        private String mContent;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_repost);
            //取得传来的数据
            Intent intent = getIntent();
            mPostForSelf = intent.getParcelableExtra("postKey");
            //加载控件
            initView();
            //取得数据
            getReposts();
            //处理数据,更新UI
            handleMsg();
            //设置刷新事件
            handleRefresh();
    
        }
    
    
        //插入数据
        private void insertRepost(final Repost repost) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Log.d(TAG, "进入到插入方法了...");
                    HttpUtils httpUtils = new HttpUtils();
                    Call call = httpUtils.getCalls("http://39.97.109.245/TDTreeHole/repost?postid=" + repost.getPostid() + "&&content=" + repost.getContent() +
                            "&&publishtime=" + repost.getPublishtime() + "&&userid=" + repost.getUserid());
                    call.enqueue(new Callback() {
                        @Override
                        public void onFailure(@NotNull Call call, @NotNull IOException e) {
                            //请求失败的回调方法
                            Log.d(TAG, "onFailure and Exception is -->" + e);
                        }
                        @Override
                        public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                            //请求成功的回调方法
                            Log.d(TAG, "onResponse...");
                            Gson gson = new Gson();
                            Type type = new TypeToken<String>() {}.getType();
                            String result = gson.fromJson(response.body().string(), type);
                            Log.d(TAG,"result =="+result);
                            Message message = new Message();
                            message.what = IS_INSERTED;
                            message.obj = result;
                            mHandler.sendMessage(message);
                        }
                    });
                }
            }).start();
        }
    
        //处理刷新事件
        private void handleRefresh() {
            mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
                @Override
                public void onRefresh() {
                    //复写上拉刷新
                    getReposts();
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mRecyclerView.refreshComplete();
                        }
                    }, 1500);
                }
    
                @Override
                public void onLoadMore() {
                    //复写下拉默认下拉方法。
                    //这里使用了footview,不再需要在这里复写.
                }
            });
        }
    
        //设置数据并更新UI
        private void setData() {
            //在设置数据前,如果有数据则先清空.防止加载重复数据
            if (mPostAndReposts != null) {
                mPostAndReposts.removeAll(mPostAndReposts);
            }
            PostAndRepost postAndRepost = new PostAndRepost();
            postAndRepost.setType(PostAndRepostAdapter.TYPE_POST_CONTENT);
            ItemBean itemBean = new ItemBean();
            itemBean.setUsername(mPostForSelf.getTitle());
            itemBean.setPosttime(mPostForSelf.getPosttime());
            itemBean.setContent(mPostForSelf.getPostcontent());
            itemBean.setTitle(mPostForSelf.getTitle());
            postAndRepost.setPost(itemBean);
            mPostAndReposts.add(postAndRepost);
            for (ItemBeanRepost item : mItemBeanReposts) {
                ItemBeanRepost items = new ItemBeanRepost();
                items.setName(item.getName());
                items.setContent(item.getContent());
                items.setPosttime(item.getPosttime());
                PostAndRepost postsAndReposts = new PostAndRepost();
                postsAndReposts.setType(PostAndRepostAdapter.TYPE_REPOST_CONTENT);
                postsAndReposts.setReposts(items);
                mPostAndReposts.add(postsAndReposts);
            }
            //数据设置完去更新UI
            showReposts();
            //设置UI的样式
            setRepostsStyle();
        }
    
        //设置UI样式
        private void setRepostsStyle() {
            //找到footerView
            View footview = LayoutInflater.from(this).inflate(R.layout.repost_footer, mRecyclerView, false);
            //设置是否允许下拉刷新
            mRecyclerView.setPullRefreshEnabled(true);
            //设置是否允许上拉加载
            mRecyclerView.setLoadingMoreEnabled(true);
            //设置样式
            mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallPulseRise);
            mView = LayoutInflater.from(RepostActivity.this).inflate(R.layout.repost_footer,mRecyclerView,false);
            mAnswerBtn = mView.findViewById(R.id.answer_btn);
            mRepostContent = mView.findViewById(R.id.repost_content_tv);
            //设置footer
            mRecyclerView.setFootView(footview, new CustomFooterViewCallBack() {
                @Override
                public void onLoadingMore(View yourFooterView) {
    
                }
    
                @Override
                public void onLoadMoreComplete(View yourFooterView) {
    
                }
    
                @Override
                public void onSetNoMore(View yourFooterView, boolean noMore) {
    
                }
            });
            Log.d(TAG,"mView =="+mRecyclerView.getFootView());
    
    
        }
    
        //更新UI
        private void showReposts() {
            Log.d(TAG, "showReposts...");
            //设置布局管理器
            LinearLayoutManager layoutManager = new LinearLayoutManager(this);
            //设置水平还是竖直
            layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            //设置标准还是逆向
            layoutManager.setReverseLayout(false);
            //布局管理器放入RecyclerView
            mRecyclerView.setLayoutManager(layoutManager);
            //创建适配器
            mAdapter = new PostAndRepostAdapter(mPostAndReposts);
            //设置前判断是否有Adapter,若不为空则移除所有数据再添加
            if (mRecyclerView.getAdapter() != null) {
                mRecyclerView.removeAllViews();
            }
            //设置进去
            mRecyclerView.setAdapter(mAdapter);
    
        }
    
        //取得对应的数据并处理
        private void handleMsg() {
            mHandler = new Handler(new Handler.Callback() {
                boolean isHandled = false;
    
                @Override
                public boolean handleMessage(@NonNull Message msg) {
                    switch (msg.what) {
                        case GET_REPORTS:
                            List<Repost> repostList = (List<Repost>) msg.obj;
                            List<ItemBeanRepost> itemBeanReposts = new ArrayList<>();
                            for (Repost repost : repostList) {
                                ItemBeanRepost itemBeanRepost = new ItemBeanRepost();
                                itemBeanRepost.setName("" + repost.getUserid());
                                itemBeanRepost.setPosttime(repost.getPublishtime());
                                itemBeanRepost.setContent(repost.getContent());
                                itemBeanReposts.add(itemBeanRepost);
                            }
                            mItemBeanReposts = itemBeanReposts;
                            //给适配器设置数据
                            setData();
                            isHandled = true;
                            break;
                        case IS_INSERTED:
                            int result = Integer.parseInt((String)msg.obj) ;
                            //大于0代表插入成功,更新列表
                            if (result > 0) {
                                getReposts();
                                mRecyclerView.refreshComplete();
                            }
                            break;
                    }
                    return isHandled;
                }
            });
        }
    
        //获取回复数据
        private void getReposts() {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    HttpUtils httpUtils = new HttpUtils();
                    Call call = httpUtils.getCalls("http://39.97.109.245/TDTreeHole/getRepost?postid= " + mPostForSelf.getPostid());
                    Log.d(TAG, "postId ==" + mPostForSelf.getPostid());
                    call.enqueue(new Callback() {
                        @Override
                        public void onFailure(@NotNull Call call, @NotNull IOException e) {
                            //失败后的回调方法
                            Log.d(TAG, "onFailure and Exception is -->" + e);
                        }
    
                        @Override
                        public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                            //成功后的回调方法
                            Log.d(TAG, "onResponse...");
                            Gson gson = new Gson();
                            Type type = new TypeToken<List<Repost>>() {
                            }.getType();
                            List<Repost> reposts = gson.fromJson(response.body().string(), type);
                            //Log.d(TAG,"reposts[0] content =="+reposts.get(0).getContent());
                            Message message = new Message();
                            message.what = GET_REPORTS;
                            message.obj = reposts;
                            mHandler.sendMessage(message);
                        }
                    });
                }
            }).start();
        }
    
        //加载控件
        private void initView() {
            mRecyclerView = this.findViewById(R.id.recycler_view_for_repost);
    
        }
        public void TestRepost(View view){
            Log.d(TAG,"onClick...");
            mContent = mRepostContent.getText().toString();
            int postid = mPostForSelf.getPostid();
            Log.d(TAG,"content =="+mContent);
            //设置日期格式
            DateFormat dateFormat = DateFormat.getDateInstance(2);
            //获取当前时间
            String publishtime =dateFormat.format(new Date());
            //简单的判空处理
            if (TextUtils.isEmpty(mContent)) {
                Toast.makeText(RepostActivity.this,"请输入回复内容!",Toast.LENGTH_SHORT).show();
                return;
            }
            final Repost repost = new Repost();
            repost.setPostid(postid);
            repost.setContent(mContent);
            repost.setPublishtime(publishtime);
            //暂时使用测试数据,等登录注册模块做好后Intent传值过来
            repost.setUserid(1);
            //去插入数据
            insertRepost(repost);
        }
    }
  • 相关阅读:
    Dev 控件笔记1 repositoryItemLookUpEdit 控件
    装饰账务管理
    Tiptop ERP 采购运费一键分摊
    笔记:两数互相交换,不使用第三方变量
    .net core3.0 webapi搭建(一)
    【笔记】冒泡排序
    Mysql 几种常见的插入 Insert into,Replace Into,Insert ignore
    【转】IEnumerable接口的一个简单示例
    [转]从实例谈OOP、工厂模式和重构
    浅谈C#委托的用法-delegate[转]
  • 原文地址:https://www.cnblogs.com/hang-hang/p/12763797.html
Copyright © 2011-2022 走看看