zoukankan      html  css  js  c++  java
  • 团队冲刺(六)

    一、认领任务

    经过团队讨论,我认领到的工作是:分享页面的运动排行的实现

    二、任务完成时间估算

    页面布局 2h
    从数据库提取 5h

    分享页面

    展示如下:

    主要的实现代码:

    shareFragment

    package com.example.myapplication5;


    import android.app.Fragment;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AbsListView;
    import android.widget.ArrayAdapter;
    import android.widget.ImageButton;
    import android.widget.ListView;
    import android.widget.Toast;

    import com.alibaba.fastjson.JSON;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;


    /**
    * A simple {@link Fragment} subclass.
    */
    public class shareFragment extends Fragment {
    private View ly3;

    private ImageButton imageButton;
    private ImageButton imageButton5;
    private ImageButton imageButton6;
    private ImageButton imageButton7;
    ListView nameList;
    ListView timeList;
    private String[] Name = new String[0];
    private String[] Time = new String[0];



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    Intent intent = getActivity().getIntent();
    final String name2 = intent.getStringExtra("name");
    if(ly3 ==null){
    ly3 = inflater.inflate(R.layout.tab03,null);
    nameList = (ListView) ly3.findViewById(R.id.nameList);
    timeList = (ListView) ly3.findViewById(R.id.timeList);

    }
    class postTask extends AsyncTask {

    @Override
    protected Object doInBackground(Object[] params) {
    String path=params[0].toString();
    try {
    //获取网络上get方式提交的整个路径
    URL url=new URL(path);
    //打开网络连接
    HttpURLConnection conn= (HttpURLConnection) url.openConnection();
    //设置提交方式
    conn.setRequestMethod("POST");
    //设置网络超时时间
    conn.setConnectTimeout(5000);
    conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");//键和值是固定的
    //设置允许对外输出数据
    conn.setDoOutput(true);
    //把界面上的所有数据写出去
    if(conn.getResponseCode()==200){
    //用io流与web后台进行数据交互
    InputStream is=conn.getInputStream();
    //字节流转字符流
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
    //读出每一行的数据
    String str=br.readLine();
    //返回读出的每一行的数据
    return str;
    }
    } catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return null;
    }

    @Override
    protected void onPostExecute(Object o) {
    super.onPostExecute(o);
    //获取Android studio与web后台数据交互获得的值
    String s= (String) o;
    if(s ==null||s.length()<=0){
    Toast.makeText(getActivity(), "无排行", Toast.LENGTH_SHORT).show();
    }
    else{
    List<Zong> shopInfos = JSON.parseArray(s, Zong.class);
    List<String> list11 = new ArrayList<>();
    List<String> list22 = new ArrayList<>();
    for (Zong zong : shopInfos) {

    System.out.println(zong.getName());
    System.out.println(zong.getZong());

    list11.add(new String(zong.getName()));
    list22.add(new String(zong.getSzong()));

    //
    }
    Name=list11.toArray(new String[list11.size()]);
    Time=list22.toArray(new String[list22.size()]);

    // Toast.makeText(SActivity.this, s, Toast.LENGTH_SHORT).show();
    dosome();}

    }
    public void dosome(){
    //传递参数
    nameList.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, Name));
    timeList.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, Time));
    setListViewOnTouchAndScrollListener(nameList,timeList);
    }
    }

    String path="http://10.0.2.2:8080/testhttp/DateShow.Servlet";//这里是本地web的地址,先运行httptest的Servlet再启动,才不会闪退。而http://120.79.40.20/testhttp/ http://10.0.2.2:8080/testhttp/
    //调用postTask,把获取到的数据与路径放入方法中,这里没有放数据。
    new postTask().execute(path);
    return ly3;
    }


    public void setListViewOnTouchAndScrollListener(final ListView listView1,final ListView listView2){


    //设置listview2列表的scroll监听,用于滑动过程中左右不同步时校正
    listView2.setOnScrollListener(new AbsListView.OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    //如果停止滑动
    if(scrollState == 0 || scrollState == 1){
    //获得第一个子view
    View subView = view.getChildAt(0);

    if(subView !=null){
    final int top = subView.getTop();
    final int top1 = listView1.getChildAt(0).getTop();
    final int position = view.getFirstVisiblePosition();

    //如果两个首个显示的子view高度不等
    if(top != top1){
    listView1.setSelectionFromTop(position, top);
    }
    }
    }

    }

    public void onScroll(AbsListView view, final int firstVisibleItem,
    int visibleItemCount, int totalItemCount) {
    View subView = view.getChildAt(0);
    if(subView != null){
    final int top = subView.getTop();

    // //如果两个首个显示的子view高度不等
    int top1 = listView1.getChildAt(0).getTop();
    if(!(top1 - 7 < top &&top < top1 + 7)){
    listView1.setSelectionFromTop(firstVisibleItem, top);
    listView2.setSelectionFromTop(firstVisibleItem, top);
    }

    }
    }
    });

    //设置listview1列表的scroll监听,用于滑动过程中左右不同步时校正
    listView1.setOnScrollListener(new AbsListView.OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    if(scrollState == 0 || scrollState == 1){
    //获得第一个子view
    View subView = view.getChildAt(0);

    if(subView !=null){
    final int top = subView.getTop();
    final int top1 = listView2.getChildAt(0).getTop();
    final int position = view.getFirstVisiblePosition();

    //如果两个首个显示的子view高度不等
    if(top != top1){
    listView1.setSelectionFromTop(position, top);
    listView2.setSelectionFromTop(position, top);
    }
    }
    }
    }

    @Override
    public void onScroll(AbsListView view, final int firstVisibleItem,
    int visibleItemCount, int totalItemCount) {
    View subView = view.getChildAt(0);
    if(subView != null){
    final int top = subView.getTop();
    listView1.setSelectionFromTop(firstVisibleItem, top);
    listView2.setSelectionFromTop(firstVisibleItem, top);

    }
    }
    });
    }

    }

    xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="top"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="240dp"
    android:background="@drawable/runbg">

    <androidx.constraintlayout.widget.Guideline
    android:id="@+id/guideline4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.59" />

    <TextView
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="运动排行"
    android:textSize="24sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/guideline4"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.076" />

    <ListView
    android:id="@+id/nameList"
    android:layout_width="206dp"
    android:layout_height="140dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/guideline4"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline6" />

    <ListView
    android:id="@+id/timeList"
    android:layout_width="93dp"
    android:layout_height="140dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/guideline5"
    app:layout_constraintStart_toStartOf="@+id/guideline4"
    app:layout_constraintTop_toTopOf="@+id/guideline6" />

    <androidx.constraintlayout.widget.Guideline
    android:id="@+id/guideline5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.89" />

    <androidx.constraintlayout.widget.Guideline
    android:id="@+id/guideline6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_begin="62dp" />

    <TextView
    android:id="@+id/textView7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="运动时长"
    android:textSize="24sp"
    app:layout_constraintBottom_toTopOf="@+id/guideline6"
    app:layout_constraintEnd_toStartOf="@+id/guideline5"
    app:layout_constraintStart_toStartOf="@+id/guideline4"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.47000003" />

    </androidx.constraintlayout.widget.ConstraintLayout>


    </LinearLayout>

    下面是后台的实现:

    bean层:


    public class Date {
    private String type;
    private String time;
    private String date;
    private String name;

    public String getType() {
    return type;
    }
    public void setType(String type) {
    this.type = type;
    }
    public String getTime() {
    return time;
    }
    public void setTime(String time) {
    this.time = time;
    }
    public String getDate() {
    return date;
    }
    public void setDate(String date) {
    this.date = date;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }

    }

    dao层:


    public class DateShowDao {
    public List<Date> select(){
    Connection conn = DBUtil.getConn(); //连接数据库
    List<Date> list = new ArrayList<Date>();
    try {
    String sql="select * from date";
    Statement pstmt = (Statement) conn.createStatement();
    ResultSet rs = (ResultSet) pstmt.executeQuery(sql);
    while(rs.next()) {
    Date Date=new Date();
    Date.setType(rs.getString("type"));
    Date.setTime(rs.getString("time"));
    Date.setDate(rs.getString("date"));
    Date.setName(rs.getString("name"));
    list.add(Date);
    }
    rs.close();
    pstmt.close();
    conn.close();

    }catch(SQLException e) {
    e.printStackTrace();
    }
    return list;
    }
    public List<Date> select1(String name){
    Connection conn = DBUtil.getConn(); //连接数据库
    List<Date> list = new ArrayList<Date>();
    try {
    String sql="select * from date where name like '%"+name+"%' ";
    Statement pstmt = (Statement) conn.createStatement();
    ResultSet rs = (ResultSet) pstmt.executeQuery(sql);
    while(rs.next()) {
    Date Date=new Date();
    Date.setType(rs.getString("type"));
    Date.setTime(rs.getString("time"));
    Date.setDate(rs.getString("date"));
    Date.setName(rs.getString("name"));
    list.add(Date);
    }
    rs.close();
    pstmt.close();
    conn.close();

    }catch(SQLException e) {
    e.printStackTrace();
    }
    return list;
    }
    }

    servlet层:


    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;

    import com.test.dao.DateShowDao;
    import com.test.bean.Date;
    import com.test.bean.Shiwu;
    import com.test.bean.Zong;

    /**
    * Servlet implementation class DateShowServlet
    */
    @WebServlet("/DateShowServlet")
    public class DateShowServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#HttpServlet()
    */
    public DateShowServlet() {
    super();
    // TODO Auto-generated constructor stub
    }

    /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    DateShowDao dsd=new DateShowDao();
    // int t=0;
    List<Date> list = dsd.select();
    System.out.println(list);
    int j=0;
    List<String> list1 = new ArrayList<>();
    List<Date> list2 = new ArrayList<>();
    List<Zong> list3 = new ArrayList<Zong>();
    for(Date date: list){
    if(!list1.contains(date.getName())) {
    list1.add(date.getName());
    }
    // j++;
    }
    // System.out.println("j:"+j);
    for(String s:list1) {
    Zong z= new Zong(s, j);
    z.setName(s);
    z.setZong(0);
    list3.add(z);
    }
    for(Zong z:list3) {
    int t=0;
    for(Date date:list) {
    if(date.getName().equals(z.getName())) {
    String[] my =date.getTime().split(":");
    int hour =Integer.parseInt(my[0]);
    int min =Integer.parseInt(my[1]);
    int sec =Integer.parseInt(my[2]);
    int zong =hour*3600+min*60+sec;
    t=t+zong;
    // System.out.println(date.getName()+zong+" "+t);
    }
    }
    // System.out.println("t:"+t);

    String str = String.valueOf(t);
    str = str+"秒";
    z.setZong(t);
    z.setSzong(str);
    }
    Collections.sort(list3, new Comparator<Zong>() {
    public int compare(Zong o1, Zong o2) {
    //升序
    return o1.getZong().compareTo(o2.getZong());
    }
    });
    System.out.println("升序排序后--:"+list3.toString());

    Collections.sort(list3, new Comparator<Zong>() {
    public int compare(Zong o1, Zong o2) {
    //升序
    return o2.getZong().compareTo(o1.getZong());
    }
    });
    System.out.println("降序排序后--:"+list3.toString());


    int i=1;
    for(Zong z:list3) {
    String ss = String.valueOf(i);
    String rr =ss+"."+z.getName();
    z.setName(rr);
    i++;
    System.out.println(z.getName()+":"+z.getZong()+" "+z.getSzong());
    }

    String json = JSON.toJSONString(list3);
    System.out.println(json);
    PrintWriter pw=response.getWriter();
    pw.write(json);
    pw.close();
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    }

    }

    这样子运动排行功能就能实现了。

    期间遇到的困难有:

    对于时间格式的转换进行排序。在这里花费的时间较多。

  • 相关阅读:
    [Eclipse]GEF入门系列(四、其他功能)
    [Eclipse]GEF入门系列(三、应用实例)
    [Eclipse]GEF入门系列(一、Draw2D)
    打开Win2000的自动补齐功能
    让URLConnection使用代理服务器
    [Eclipse]GEF入门系列(序)
    给表格的单元格增加编辑功能(In place edit)
    设置Eclipse RCP程序的外观和首选项
    利用winrar自动备份重要资料(续,经验技巧)
    终于换了新电脑
  • 原文地址:https://www.cnblogs.com/a155-/p/12791138.html
Copyright © 2011-2022 走看看