• 第一轮铁大树洞APP开发冲刺(6)


    写在前面

    今天基本上睡了一天,下午起来后开始处理队友做完的登录注册模块与后面模块的联系。最后做完了“我的”模块。在写代码的过程中遇到了很多粗心的问题,也有很多底子不稳的问题。但主要还是业务逻辑没有理清。理清业务逻辑后基本写代码就一路顺畅了。到今天我负责的后台代码已经全部写完了,我算了算,大概一共2500行...其实真的写起来也感觉不到很多,主要还是业务逻辑要理清。
    今日团队冲刺博客地址:https://www.cnblogs.com/three3/p/12756092.html

    实现截图

    登录和注册就不再演示了。
    直接演示我的模块:


    实现逻辑

    整体的实现逻辑和之前类似,书写API,然后对API中获取的数据进行处理即可:

    package com.androidlearing.tdtreehole.fragment;
    
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import androidx.annotation.NonNull;
    import androidx.fragment.app.Fragment;
    import androidx.recyclerview.widget.LinearLayoutManager;
    
    import com.androidlearing.tdtreehole.R;
    import com.androidlearing.tdtreehole.activity.RepostActivity;
    import com.androidlearing.tdtreehole.adapter.RepostForSelfAdapter;
    import com.androidlearing.tdtreehole.bean.ItemSelfRepostBean;
    import com.androidlearing.tdtreehole.httputils.HttpUtils;
    import com.androidlearing.tdtreehole.pojo.Post;
    import com.androidlearing.tdtreehole.pojo.Repost;
    import com.androidlearing.tdtreehole.pojo.Reposts;
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    import com.jcodecraeer.xrecyclerview.ProgressStyle;
    import com.jcodecraeer.xrecyclerview.XRecyclerView;
    
    import org.jetbrains.annotations.NotNull;
    
    import java.io.IOException;
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    import java.util.List;
    
    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.Response;
    
    
    public class Fragment_My_receive extends Fragment {
    
        private static final String TAG = "Fragment_My_receive";
        private static final int GET_POSTS_SELF = 0;
        private XRecyclerView mXRecyclerView;
        private Handler mHandler;
        private int mIdKey;
        private List<Reposts> postPastList;
        private String mUsername;
        private List<ItemSelfRepostBean> rePostList;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //取得传来的id值
            Bundle bundle = getArguments();
            mIdKey = bundle.getInt("idKey");
            Log.d(TAG,"idKey =="+ mIdKey);
            //取得数据
            getRePosts();
            //处理数据
            handleMsg();
        }
        //处理数据
        private void handleMsg() {
            mHandler = new Handler(new Handler.Callback() {
                @Override
                public boolean handleMessage(@NonNull Message msg) {
                    boolean isHandled = false;
                    switch(msg.what){
                        case GET_POSTS_SELF:
                            if(msg.obj!=null){
                                List<Reposts> reposts_temp = (List<Reposts>) msg.obj;
                                postPastList = reposts_temp;
                                List<ItemSelfRepostBean> itemSelfRepostBeans = new ArrayList<>();
                                for(Reposts reposts:reposts_temp){
                                    ItemSelfRepostBean itemSelfRepostBean = new ItemSelfRepostBean();
                                    itemSelfRepostBean.setContent(reposts.getRePost().getContent());
                                    itemSelfRepostBean.setPost(reposts.getPost());
                                    itemSelfRepostBean.setTime(reposts.getRePost().getPublishtime());
                                    itemSelfRepostBean.setTitle(reposts.getPost().getTitle());
                                    Log.d(TAG,"itemSelfRepostBean title=="+itemSelfRepostBean.getTitle());
                                    itemSelfRepostBeans.add(itemSelfRepostBean);
                                }
                                //判断List是否为空,若不空则清空后再添加
                                if (rePostList != null) {
                                    rePostList = null;
                                }
                                rePostList = itemSelfRepostBeans;
                                showReposts();
                                isHandled = true;
                            }
                    }
                    return isHandled;
                }
            });
        }
        //显示数据
        private void showReposts() {
            LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
            mXRecyclerView.setLayoutManager(layoutManager);
            RepostForSelfAdapter adapter = new RepostForSelfAdapter(rePostList);
            //判断适配器是否为空,如果不为空则清空后再添加数据
            if(mXRecyclerView.getAdapter()!=null){
                mXRecyclerView.removeAllViews();
            }
            adapter.setOnItemClickListener(new RepostForSelfAdapter.onItemClickListener() {
                @Override
                public void onItemClick(int position) {
                    Intent intent = new Intent(getActivity().getApplicationContext(), RepostActivity.class);
                    Post post = postPastList.get(position).getPost();
                    intent.putExtra("postKey", post);
                    startActivity(intent);
                }
            });
            mXRecyclerView.setAdapter(adapter);
            mXRecyclerView.setRefreshProgressStyle(ProgressStyle.LineScalePulseOutRapid);
            //设置刷新事件
            mXRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
                @Override
                public void onRefresh() {
                    //下拉刷新事件
                    getRePosts();
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mXRecyclerView.refreshComplete();
                        }
                    },1500);
                }
    
                @Override
                public void onLoadMore() {
                    //上拉加载更多时间
                    getRePosts();
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mXRecyclerView.loadMoreComplete();
                        }
                    },1500);
                }
            });
        }
    
    
        //取得数据
        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/getRepostsSelf?id="+ mIdKey);
                    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 {
                            //成功的回调方法:使用Gson提取json数据并转换成List格式
                            Log.d(TAG,"onResponse....");
                            Gson gson = new Gson();
                            Type type = new TypeToken<List<Reposts>>(){}.getType();
                            List<Reposts> reposts = gson.fromJson(response.body().string(), type);
                            for(Reposts reposts1:reposts){
                                Log.d(TAG,"repost =="+reposts1.getRePost()+"post ==  "+reposts1.getPost());
                            }
                            //使用Handler和message来请求主线程更新UI
                            Message message = new Message();
                            message.what = GET_POSTS_SELF;
                            message.obj = reposts;
                            mHandler.sendMessage(message);
                        }
                    });
                }
            }).start();
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View rootView = inflater.inflate(R.layout.fragment_my_receive, container, false);
            mXRecyclerView = rootView.findViewById(R.id.recycler_view_my_receive);
            return rootView;
        }
    
    }
    

    这里只贴一点

    总结

    今天大部分时间都在理清业务逻辑。也再次提醒我自己要好好思考后再下手。

  • 相关阅读:
    网络协议栈(6)RFC793TCP连接时部分异常流程及实现
    网络协议栈(5)sendto/send返回成功意味着什么
    LeetCode——Detect Capital
    LeetCode——Find All Numbers Disappeared in an Array
    LeetCode——Single Number
    LeetCode——Max Consecutive Ones
    LeetCode——Nim Game
    LeetCode——Reverse String
    LeetCode——Next Greater Element I
    LeetCode——Fizz Buzz
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/12757634.html
Copyright © 2020-2023  润新知