Advertisement
tuomasvaltanen

Untitled

Apr 12th, 2023 (edited)
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.08 KB | None | 0 0
  1. // Edistynyt mobiiliohjelmointi, 12.4.2023
  2.  
  3. // Asennetaan Directus Harjoitus 3 ohjeen mukaisesti omalle tietokoneelle.
  4.  
  5. // Kun data liikkuu oikein access_tokenin avulla myös nettiselaimesta käsin, on tehtävä hyvällä mallilla seuraavia välivaiheita varten.
  6.  
  7. // method GET
  8. // esim. http://localhost:8055/items/feedback?access_token=OMA_ACCESS_TOKEN
  9.  
  10. pitäisi antaa dataa, esim:
  11.  
  12. {"data":[{"id":1,"name":"Tester Person","location":"Rovaniemi","value":"Does this app work at the moment?"},{"id":2,"name":"Another Tester","location":"Internet","value":"How about this message, does this work?"}]}
  13.  
  14. // jos halutaan vain yksi data, voidaan suodattaa id:llä, esim. id:llä 2:
  15.  
  16. method GET
  17. http://localhost:8055/items/feedback/2?access_token=OMA_ACCESS_TOKEN
  18.  
  19. // datan lähettäminen Directusiin:
  20.  
  21. URL:
  22. http://localhost:8055/items/feedback?access_token=OMA_ACCESS_TOKEN
  23.  
  24. Method: POST
  25. Body: JSON:
  26.  
  27. {
  28. "name": "Internet Insomnia",
  29. "location": "Somewhere",
  30. "value": "Insomnia says hello!"
  31. }
  32.  
  33. // datan muokkaaminen Directusissa:
  34.  
  35. // muista antaa URLissa ID mitä muokataan! tässä tapauksessa 2
  36. http://localhost:8055/items/feedback/2?access_token=OMA_ACCESS_TOKEN
  37.  
  38. Method: PATCH (joskus muissa rajapinnoissa: PUT)
  39. Body: JSON:
  40.  
  41. {
  42. "name": "Muokattu Nimi",
  43. "location": "Muokkaamo",
  44. "value": "This value has been UPDATED!"
  45. }
  46.  
  47. // datan poistaminen Directusista
  48.  
  49. // muista antaa poistettava id URL:ssa, tässä tapauksessa 3
  50. URL: http://localhost:8055/items/feedback/3?access_token=OMA_ACCESSTOKEN
  51. Method: DELETE
  52. Ei bodya
  53.  
  54. // ANDROID-projekti
  55.  
  56. // lisätään tulevaa varten uusi import gradleen:
  57. implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'
  58.  
  59. // json2kt.comia varten tarvitaan yhden feedbackin JSON-data
  60. // huom: Directus antaa datan "wräpättynä" data-kenttään:
  61.  
  62. {"data":{"id":2,"name":"Another Tester","location":"Internet","value":"How about this message, does this work?"}}
  63.  
  64. // tämän vuoksi emme voi käyttää tätä suoraan json2kt:ssa, vaan joudumme ottamaan yksittäisen feedbackin JSONin, eli tässä tapauksessa:
  65.  
  66. {"id":2,"name":"Another Tester","location":"Internet","value":"How about this message, does this work?"}
  67.  
  68.  
  69. // tehdään tämän pohjalta Android-projektiin Feedback.kt -luokka käyttämällä json2kt.comia, ja kopioidaan se kansioon datatypes -> feedback. tee feedback kansio, mikäli se puuttuu (oikealla klikkaus -> new -> package -> nimeksi feedback)
  70.  
  71. Tehdään kaksi uutta fragmentia, lisätään molemmat päävalikkoon, ja otetaan kummassakin binding layer käyttöön, esim:
  72.  
  73. FeedbackReadFragment
  74. ja
  75. FeedbBackSendFragment
  76.  
  77. esim:
  78.  
  79. class FeedbackReadFragment : Fragment() {
  80. private var _binding: FragmentFeedbackReadBinding? = null
  81. // This property is only valid between onCreateView and
  82. // onDestroyView.
  83. private val binding get() = _binding!!
  84. override fun onCreateView(
  85. inflater: LayoutInflater,
  86. container: ViewGroup?,
  87. savedInstanceState: Bundle?
  88. ): View? {
  89. _binding = FragmentFeedbackReadBinding.inflate(inflater, container, false)
  90. val root: View = binding.root
  91.  
  92.  
  93. return root
  94. }
  95. override fun onDestroyView() {
  96. super.onDestroyView()
  97. _binding = null
  98. }
  99. }
  100.  
  101. esim:
  102.  
  103. class FeedbackSendFragment : Fragment() {
  104. private var _binding: FragmentFeedbackSendBinding? = null
  105. // This property is only valid between onCreateView and
  106. // onDestroyView.
  107. private val binding get() = _binding!!
  108. override fun onCreateView(
  109. inflater: LayoutInflater,
  110. container: ViewGroup?,
  111. savedInstanceState: Bundle?
  112. ): View? {
  113. _binding = FragmentFeedbackSendBinding.inflate(inflater, container, false)
  114. val root: View = binding.root
  115.  
  116.  
  117. return root
  118. }
  119. override fun onDestroyView() {
  120. super.onDestroyView()
  121. _binding = null
  122. }
  123. }
  124.  
  125. // FeedbackReadFragmentin ulkoasu, lisätään ListView + sille id:
  126.  
  127. <?xml version="1.0" encoding="utf-8"?>
  128. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  129. xmlns:tools="http://schemas.android.com/tools"
  130. android:layout_width="match_parent"
  131. android:layout_height="match_parent"
  132. tools:context=".FeedbackReadFragment">
  133.  
  134.  
  135. <ListView
  136. android:id="@+id/listView_feedbacks"
  137. android:layout_width="match_parent"
  138. android:layout_height="match_parent" />
  139.  
  140. </FrameLayout>
  141.  
  142. // FeedbackSendFragmentin ulkoasu,
  143. // huom: EditTexteissä tulee olla minHeight vähintään 48dp, koska muuten se ei ole saavutettavuuden näkökulmasta hyvä
  144. // kuitenkin jostain syystä Androidissa EditTextin oletuskorkeus on 45dp
  145.  
  146. <?xml version="1.0" encoding="utf-8"?>
  147. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  148. xmlns:tools="http://schemas.android.com/tools"
  149. android:layout_width="match_parent"
  150. android:layout_height="match_parent"
  151. android:orientation="vertical"
  152. android:layout_margin="10dp"
  153. tools:context=".FeedbackSendFragment">
  154.  
  155.  
  156. <TextView
  157. android:layout_width="match_parent"
  158. android:layout_height="wrap_content"
  159. android:layout_marginBottom="20dp"
  160. android:text="Send us feedback!"
  161. android:textColor="#7539D8"
  162. android:textSize="30sp"
  163. android:textStyle="bold" />
  164.  
  165. <TextView
  166. android:layout_width="match_parent"
  167. android:layout_height="wrap_content"
  168. android:text="Your name:"
  169. android:textStyle="bold" />
  170.  
  171. <EditText
  172. android:id="@+id/editText_feedback_name"
  173. android:layout_width="match_parent"
  174. android:layout_height="wrap_content"
  175. android:ems="10"
  176. android:minHeight="48dp"
  177. android:hint="Who are you?"
  178. android:inputType="textPersonName" />
  179.  
  180. <TextView
  181. android:layout_width="match_parent"
  182. android:layout_height="wrap_content"
  183. android:layout_marginTop="10dp"
  184. android:textStyle="bold"
  185. android:text="Your location:" />
  186.  
  187. <EditText
  188. android:id="@+id/editText_feedback_location"
  189. android:layout_width="match_parent"
  190. android:layout_height="wrap_content"
  191. android:ems="10"
  192. android:minHeight="48dp"
  193. android:hint="Where are you?"
  194. android:inputType="textPersonName" />
  195.  
  196. <TextView
  197. android:layout_width="match_parent"
  198. android:layout_height="wrap_content"
  199. android:layout_marginTop="10dp"
  200. android:textStyle="bold"
  201. android:text="Your feedback:" />
  202.  
  203. <EditText
  204. android:id="@+id/editText_feedback_value"
  205. android:layout_width="match_parent"
  206. android:layout_height="wrap_content"
  207. android:ems="10"
  208. android:minHeight="48dp"
  209. android:hint="Please write your thoughts here..."
  210. android:inputType="textPersonName" />
  211.  
  212. <Button
  213. android:id="@+id/button_send_feedback"
  214. android:layout_width="match_parent"
  215. android:layout_height="wrap_content"
  216. android:layout_marginTop="20dp"
  217. android:text="SEND FEEDBACK" />
  218. </LinearLayout>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement