рдореИрдВрдиреЗ рд╢реЗрдбреНрдпреВрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХреИрд╕реЗ рдХрд┐рдпрд╛

рд╣рд╛рдп рд╣рдорд░!

рдкреНрд░рд┐рдп рдкрд╛рдардХ! рдпрджрд┐ рдЖрдк html рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реА рд░реЛрдЪрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рдорд┐рд▓реЗрдВрдЧреАред рдЗрд╕рдореЗрдВ рдореИрдВ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди


рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ред рдореИрдВ ITA SFU рдХрд╛ рддреГрддреАрдп рд╡рд░реНрд╖ рдХрд╛ рдЫрд╛рддреНрд░ рд╣реВрдВред рд╕рднреА рдЫрд╛рддреНрд░реЛрдВ рдХреА рддрд░рд╣, рдореБрдЭреЗ рд╣рд░ рджрд┐рди рдХрдХреНрд╖рд╛ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдФрд░ рдореБрдЭреЗ рдЕрдЧрд▓реЗ рджрд┐рди рди рдХреЗрд╡рд▓ рдЕрдиреБрд╕реВрдЪреА рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдпрд╛ рджреЛ рд╕рдкреНрддрд╛рд╣ рдкрд╣рд▓реЗ рднреАред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рд╢реЗрдбреНрдпреВрд▓ рдХреЛ рдмрдЪрд╛рдПрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН:

  • рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рд╢реЗрдбреНрдпреВрд▓ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  • рдЕрдиреБрд╕реВрдЪреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдмрджрд▓ рд╕рдХрддреА рд╣реИ

рдмреЗрд╢рдХ, рдПрдХ рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл 20 рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдЪреНрдЪреА рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЫрд╛рддреНрд░ рдХреЛ рдПрдХ рдмрдбрд╝рд╛ рдкреЗрдЬ рдлреНрд▓рд┐рдк рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рджрд┐рди рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб рдореЗрдВ, рд╢реЗрдбреНрдпреВрд▓ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдореЗрд░реЗ рд╕рдВрд╕реНрдерд╛рди рдХреА рдЕрдиреБрд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рд╣реЛрдВрдЧреЗ:

  • рдкреНрд░рджрд░реНрд╢рди: рд╡рд░реНрддрдорд╛рди рд╕рдкреНрддрд╛рд╣ рдХреА рд╕рдВрдЦреНрдпрд╛, рддрд┐рдерд┐, рд╕рдкреНрддрд╛рд╣ рдХрд╛ рджрд┐рди рдФрд░ рдЙрд╕ рджрд┐рди рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо
  • "рдкреАрдЫреЗ" рдФрд░ "рдЕрдЧрд▓рд╛" рдмрдЯрди рдХреЗ рд╕рд╛рде рдЕрдиреБрд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
  • рдпрджрд┐ рдХреЛрдИ рдЗрдВрдЯрд░рдиреЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рдирд╡реАрдирддрдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджрд┐рдЦрд╛рдПрдВ

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ


рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреА рдЖрд╕реНрддреАрди рдКрдкрд░ рдЙрдард╛рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдкреНрд░рдХрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗред рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:

рдкреНрд░рдХрдЯ рдлрд╝рд╛рдЗрд▓
рдореИрдирд┐рдлреЗрд╕реНрдЯреЛрдВ рдореЗрдВ рдЬрд╛рдПрдВ-> AndroidManifest.xml рдЕрдиреБрдорддрд┐ рдЬреЛрдбрд╝реЗрдВред рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <uses-permission android:name="android.permission.INTERNET" /> ... </manifest> 

рдЕрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЪрд╛рд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рд░рдЦреЗ: рд╢реАрд░реНрд╖рдХ, рдкрд╛рда рдмреЙрдХреНрд╕ рдФрд░ рдмрдЯрди: рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗред

рдЧрддрд┐рд╡рд┐рдзрд┐ рдорд╛рд░реНрдХрдЕрдк
 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" tools:context=".MainActivity"> <TextView android:id="@+id/WeekNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=" " app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/timetable" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="100dp" android:ems="10" android:inputType="textMultiLine" android:text="" app:layout_constraintTop_toBottomOf="@+id/WeekNumber" tools:layout_editor_absoluteX="0dp" /> <Button android:id="@+id/next" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" app:layout_constraintBottom_toBottomOf="parent" tools:layout_editor_absoluteX="0dp"></Button> <Button android:id="@+id/down" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" app:layout_constraintBottom_toTopOf="@+id/next" tools:layout_editor_absoluteX="0dp"></Button> </androidx.constraintlayout.widget.ConstraintLayout> 

рдЕрдм рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЕрджреНрднреБрдд рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд╛рд░реНрд╕рд░ Jsoup рд╣рдорд╛рд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рддреБрд░рдВрдд WebView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рддрд░реАрдХрд╛ рдмреЗрд╣рдж рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Jsoup рдХрдиреЗрдХреНрд╢рди
Build.gradle рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ:
 implementation 'org.jsoup:jsoup:1.11.1' 


рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣реИрдВрдЧ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ UI рд╕реНрдЯреНрд░реАрдо рдХреЗ рдмрд╛рд╣рд░ рд╕реНрдерд┐рдд рд╡реЗрдм рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо AsyncTask рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕рдореЗрдВ рдореВрд▓рднреВрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдбрд╛рд▓реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдпреВрдЖрдИ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВрдЧреЗред

рдЬреЛ рд▓реЛрдЧ AsyncTask рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдЖрдкрдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдХреНрд╖рд╛ рдХреЛ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

AsyncTask рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛрдб
 package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class MainActivity extends AppCompatActivity { public boolean offline; public String request; public String WeekNumber; public int count; // public TextView weeknumber; public EditText timetable; public Button next; public Button down; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); offline = false;//     count = 0;//      weeknumber = findViewById(R.id.WeekNumber); timetable = findViewById(R.id.timetable); next = findViewById(R.id.next); down = findViewById(R.id.down); getting AsyncTask = new getting(); AsyncTask.execute(); } class getting extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); //         } @Override protected String doInBackground(String... params) { /*             html  */ String answer = "";//         .     String url = "https://ictis.sfedu.ru/rasp/HTML/82.htm";//     Document document = null; try { document = Jsoup.connect(url).get();//     answer = document.body().html();//     body  } catch (IOException e) { //   ,   ,     //    answer    txt  try { BufferedReader read = new BufferedReader(new InputStreamReader(openFileInput("timetable.txt"))); String str = ""; while ((str = read.readLine())!=null){ answer +=str; } read.close(); offline = true;//    } catch (FileNotFoundException ex) { //     ,    answer  answer = ""; ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } //    html // html      nolessone //   answer = answer.replace("","") .replace("","") .replace("<br>","br") .replace("<font face=\"Arial\" size=\"1\"></font><p align=\"CENTER\"><font face=\"Arial\" size=\"1\"></font>","nolessone")// ""    nolessone .replace(" ",""); return Jsoup.parse(answer).text();//      answer    UI- } @Override protected void onPostExecute(String result) { super.onPostExecute(result); /*            */ request = "";//   String temp = result.toString();//   //  ,   timetable.txt,        try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("timetable.txt",MODE_PRIVATE))); writer.write(temp); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } boolean start = false; for(String str:temp.split(": ")){ if(start) { //      newweek    request request += "newweek"+str.split("")[0] + "\n"; } start = true; } //      newday,     request = request.replace("","newday").replace("","newday") .replace("","newday").replace("","newday") .replace("","newday").replace("","newday"); /*    count = 0,       count = -1,    count = 1,    . */ Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR,count); Date dayformat = calendar.getTime(); SimpleDateFormat format = new SimpleDateFormat("dd MMMM"); //  timetable.setText(request); if(offline && !temp.equals("")){ // ,      Toast.makeText(getApplicationContext(),"   !",Toast.LENGTH_LONG).show(); } //    ,    if(temp.equals("")){ Toast.makeText(getApplicationContext()," !",Toast.LENGTH_LONG).show(); } } } } 


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЗрд╕ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо


рдЖрдЗрдП рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдЬрд┐рдирдХрд╛ рд╣рдордиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:

рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдПрдБ

 Document document = null; 

рд╣рдореЗрдВ рдкреЗрдЬ рдорд┐рд▓рддрд╛ рд╣реИ

 document = Jsoup.connect(url).get(); 

рдЕрдм рд╣рдо рдмреЙрдбреА рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ

 answer = document.body().html(); 

Jsoup рдЕрдиреНрдп рдореБрдЦреНрдп рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рднреА рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╢реАрд░реНрд╖рдХ () рд╡рд┐рдзрд┐, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреГрд╖реНрда рд╢реАрд░реНрд╖рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдЪрдЯреАрдПрдордПрд▓ () рд╡рд┐рдзрд┐ рд░рд┐рдЯрд░реНрди HTML рдХреЛрдб, рдФрд░ рдкрд╛рда () HTML рдЯреИрдЧ рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рджрд╛ рдкрд╛рда рд╣реИред

Html рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рднреА рдЯреИрдЧ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реБрдП рдЗрд╕реЗ рд╕рд╛рджреЗ рдкрд╛рда рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрд╛рд░реНрд╕ (htmlcode) .text () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 return Jsoup.parse(answer).text(); 

рдореИрдВ рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧреА Jsoup рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 Element link = document.select("tag");//    String url = link.attr("attribute"); //    

рдКрдкрд░ рдХреЗ рд╕реНрдкреЙрдЗрд▓рд░ рдореЗрдВ рдЪрд┐рддреНрд░ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреА рдЕрдиреБрд╕реВрдЪреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕реЗ 20 рд╕рдкреНрддрд╛рд╣ рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЕрдм рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рдЖрдЬ рдвреВрдВрдврдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдорди рдореЗрдВ рд▓рд╛рдирд╛


рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ? рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдкреГрд╖реНрда рдХреЗ HTML рдХреЛрдб рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдП рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдердбреНрд╕ .split () рдФрд░ .replace () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рддрд╛рд░реАрдЦ рдорд┐рд▓рддреА рд╣реИред рдлрд┐рд░ рд╣рдо рджреЛ рдЪрдХреНрд░ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЪрдХреНрд░ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдЪрд▓рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛, рдЬреЛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ, рд╕рдкреНрддрд╛рд╣ рдХреЗ рджрд┐рдиреЛрдВ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред рдпрджрд┐ рджрд┐рди рдХреА рддрд╛рд░реАрдЦ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рджрд┐рди рдХреА рдЕрдиреБрд╕реВрдЪреА рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рд░ рдХреЛрдИ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ред

рдкреВрд░реНрдг рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛрдб
 package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class MainActivity extends AppCompatActivity { public boolean offline; public String request; public String WeekNumber; public int count; // public TextView weeknumber; public EditText timetable; public Button next; public Button down; public void formating(String day){ String DayTimetable = ""; String[] weeks = request.split("newweek"); String DayData = "";//      /*                 less      tich       aud  ,      ( -230) */ String less[] = new String[7]; String tich[] = new String[7]; String aud[] = new String[7]; for(String thisweek:weeks){//   if(thisweek.indexOf(day) != -1) {//        ... WeekNumber = thisweek.split(" ")[0];//   for(String thisday:thisweek.split("newday")){//      if(thisday.indexOf(day) != -1) {//       , ... // ,       newless //      . . .  . thisday = thisday.replace("no","newless") .replace(".","newless.") .replace(".","newless.") .replace(".","newless."); int i = 0; for(String thislessone:thisday.split("newless")) {//      if(i != 0) { String[] ScienceInformation = thislessone.replace("br ","").split("br"); String science = ScienceInformation[0]; science = science.replace("lessone",""); String ticher = ""; if(ScienceInformation.length > 1) ticher = ScienceInformation[1]; DayTimetable += i + "-:  - " + science+"\n"+ticher+"\n\n"; ticher = ticher.replace("-","@-").replace("-","@-") .replace("-","@-").replace("-","@-") .replace("-","@-").replace("-","@-") .replace("-","@-").replace("K-","@K-"); String Auditory; if(ticher.split("@").length == 2){ Auditory = ": "+ticher.split("@")[1]; }else Auditory = ": ";//     ticher = ticher.split("@")[0]; if(ticher.length() >0){ ticher = ": "+ticher; }else{ ticher = ""; } if(i==1){ less[i-1] = "1- (8:00-9:35) "+science; } if(i==2){ less[i-1] = "2- (9:50-11:25) "+science; } if(i==3){ less[i-1] = "3- (11:55-13:30) "+science; } if(i==4){ less[i-1] = "4- (13:45-15:20) "+science; } if(i==5){ less[i-1] = "5- (15:50-17:25) "+science; } if(i==6){ less[i-1] = "6- (17:40-19:15) "+science; } if(i==7){ less[i-1] = "7- (19:30-21:05) "+science; } tich[i-1] = ticher; aud[i-1] = Auditory; }else DayData = thislessone;// i=0  thislessone     i++; } } } } } timetable.setText(DayData);//  for(int i = 0; i <=6; i++){ timetable.setText(timetable.getText()+"\n"+less[i]+tich[i]+aud[i]);// ,      (   ) } weeknumber.setText(" "+ WeekNumber + " ");//   } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); offline = false;//     count = 0; weeknumber = findViewById(R.id.WeekNumber); timetable = findViewById(R.id.timetable); next = findViewById(R.id.next); down = findViewById(R.id.down); getting getting = new getting(); getting.execute(); //      next.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count++; Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR,count); Date dayformat = calendar.getTime(); SimpleDateFormat format = new SimpleDateFormat("dd MMMM"); formating(format.format(dayformat)); } }); down.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count--; Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR,count); Date dayformat = calendar.getTime(); SimpleDateFormat format = new SimpleDateFormat("dd MMMM"); formating(format.format(dayformat)); } }); } class getting extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); //         getSupportActionBar().setTitle("..."); } @Override protected String doInBackground(String... params) { /*             html  */ String answer = "";//         .     String url = "https://ictis.sfedu.ru/rasp/HTML/82.htm";//     Document document = null; try { document = Jsoup.connect(url).get();//     answer = document.body().html();//     body  } catch (IOException e) { //   ,   ,     //    answer    txt  try { BufferedReader read = new BufferedReader(new InputStreamReader(openFileInput("timetable.txt"))); String str = ""; while ((str = read.readLine())!=null){ answer +=str; } read.close(); offline = true;//    } catch (FileNotFoundException ex) { //     ,    answer  answer = ""; ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } //    html // html      nolessone //   answer = answer.replace("","") .replace("","") .replace("<br>","br") .replace("<font face=\"Arial\" size=\"1\"></font><p align=\"CENTER\"><font face=\"Arial\" size=\"1\"></font>","nolessone") .replace(" ",""); return Jsoup.parse(answer).text();//      answer    UI- } @Override protected void onPostExecute(String result) { super.onPostExecute(result); /*            */ request = "";//   String temp = result.toString();//   //  ,   timetable.txt,        try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("timetable.txt",MODE_PRIVATE))); writer.write(temp); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } boolean start = false; for(String str:temp.split(": ")){ if(start) { //      newweek    request request += "newweek"+str.split("")[0] + "\n"; } start = true; } //      newday,     request = request.replace("","newday").replace("","newday") .replace("","newday").replace("","newday") .replace("","newday").replace("","newday"); /*    count = 0,       count = -1,    count = 1,    . */ Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR,count); Date dayformat = calendar.getTime(); SimpleDateFormat format = new SimpleDateFormat("dd MMMM"); // ,      formating(format.format(dayformat)); if(offline && !temp.equals("")){ // ,      Toast.makeText(getApplicationContext(),"   !",Toast.LENGTH_LONG).show(); } //    ,    if(temp.equals("")){ Toast.makeText(getApplicationContext()," !",Toast.LENGTH_LONG).show(); } getSupportActionBar().setTitle(""); } } } 


рд╢реЗрдбреНрдпреВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ () рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░реАрдЦ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдЙрд╕ рджрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЗрдбреНрдпреВрд▓ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрдЯрди "рдмреИрдХ" рдФрд░ "рдиреЗрдХреНрд╕реНрдЯ" рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЕрдЧрд▓рд╛ рдмрдЯрди рдХреЛрдб:

 count++; Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR,count); Date dayformat = calendar.getTime(); SimpleDateFormat format = new SimpleDateFormat("dd MMMM"); formating(format.format(dayformat));//  formating 

рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╣рдореЗрдВ рдЖрдЬ рдХреА рддрд╛рд░реАрдЦ рдорд┐рд▓рддреА рд╣реИред рдРрдб рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЧрдгрдирд╛ рдореЗрдВ рджрд░реНрдЬ рджрд┐рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдЬ рдХреА рддрд╛рд░реАрдЦ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдмреИрдХ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ


рдирд┐рд╖реНрдХрд░реНрд╖


рдмреЗрд╢рдХ, рдЖрдк рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рд╡рд┐рд╖рдп рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдкреЙрдЗрд▓рд░ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдмреЗрд╣рддрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕рдВрд▓рдЧреНрди рдХрд┐рдПред рдореИрдВрдиреЗ рдХрдИ рдлрд╝рдВрдХреНрд╢рди рднреА рдЬреЛрдбрд╝реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдПрдХ рдЕрдзреНрдпрдпрди рд╕рдореВрд╣ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЖрджрд┐ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд╣реА рдореИрдВ рдЗрд╕реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реВрдВред

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ

Source: https://habr.com/ru/post/hi483284/


All Articles