团队冲刺——第七天

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);
    }
}

猜你喜欢

转载自www.cnblogs.com/hang-hang/p/12763797.html