am_dot_com

DDM 2022-12-21

Dec 21st, 2022
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.46 KB | None | 0 0
  1. package com.joythis.android.webfavorites;
  2.  
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import androidx.loader.content.AsyncTaskLoader;
  5.  
  6. import android.content.Intent;
  7. import android.net.Uri;
  8. import android.os.AsyncTask;
  9. import android.os.Bundle;
  10. import android.os.Handler;
  11. import android.os.Looper;
  12. import android.util.Log;
  13. import android.view.View;
  14. import android.widget.ArrayAdapter;
  15. import android.widget.Button;
  16. import android.widget.Spinner;
  17. import android.widget.TextView;
  18.  
  19. import java.util.Calendar;
  20. import java.util.concurrent.ExecutorService;
  21. import java.util.concurrent.Executors;
  22.  
  23. public class MainActivity extends AppCompatActivity {
  24.  
  25. class MinhaTarefaAssincrona extends AsyncTask<String, Void, String>{
  26. @Override
  27. protected String doInBackground(String... strings) {
  28. //código que seja preciso executar em thread própria
  29. //deve escrever-se aqui
  30. String url = strings[0];
  31. return AmIoHttp.io_https_ReadAll(url);
  32. }//doInBackground
  33.  
  34. //automaticamente chamado depois de doInBackground terminar
  35. @Override
  36. protected void onPostExecute(String s) {
  37. super.onPostExecute(s);
  38. mTvResult.setText(s);
  39. }//onPostExecute
  40. }//MinhaTarefaAssincrona
  41.  
  42.  
  43. public final static String KEY_URL = "KEY_URL";
  44.  
  45. public final static String PACKAGE_GOOGLE_CHROME =
  46. "com.android.chrome";
  47.  
  48. public final static String PACKAGE_BROWSER_XPTO =
  49. "com.browser.xpto";
  50.  
  51. Spinner mSpnBrowseMode;
  52. Button mBtnBrowseUrl1, mBtnBrowseUrl2, mBtnBrowseUrl3;
  53. TextView mTvResult;
  54.  
  55. View.OnClickListener mClickHandler = new View.OnClickListener() {
  56. @Override
  57. public void onClick(View v) {
  58. String webAddress = ((Button)v).getText().toString().trim();
  59. int browseMode = mSpnBrowseMode.getSelectedItemPosition();
  60. visitUrl(
  61. webAddress,
  62. browseMode
  63. );
  64. }
  65. };//mClickHandler
  66.  
  67. void visitUrl(String pUrl, int pMode){
  68. Uri uriUrl = Uri.parse(pUrl);
  69. Intent visitUrl;
  70. switch(pMode) {
  71. case 0: // via chooser
  72. visitUrl = new Intent(Intent.ACTION_VIEW);
  73. visitUrl.setData(uriUrl);
  74. /*
  75. aparece um "chooser" - um diálogo em que o user
  76. é perguntado com qual app (de entre várias disponíveis)
  77. pretende fazer a ação
  78. */
  79. startActivity(visitUrl);
  80. break;
  81. case 1: // via chrome package (potencial de falha)
  82. try {
  83. visitUrl = new Intent(Intent.ACTION_VIEW);
  84. visitUrl.setData(uriUrl);
  85. visitUrl.setPackage(PACKAGE_GOOGLE_CHROME);
  86. startActivity(visitUrl);
  87. }
  88. catch (Exception e){
  89. Log.e("@visitUrl", e.toString());
  90. }
  91. case 2: // via in-app web browser
  92. visitUrl = new Intent(
  93. MainActivity.this,
  94. MyWebBrowser.class
  95. );
  96. visitUrl.putExtra(
  97. KEY_URL, pUrl
  98. );
  99. startActivity(visitUrl);
  100. break;
  101. }//switch
  102. }//visitUrl
  103.  
  104. @Override
  105. protected void onCreate(Bundle savedInstanceState) {
  106. super.onCreate(savedInstanceState);
  107. setContentView(R.layout.rl_web_favorites);
  108.  
  109. init();
  110. }
  111.  
  112. void populateSpinner(Spinner pSpn, String[] pPop){
  113. if(pSpn!=null){
  114. ArrayAdapter<String> ad = new ArrayAdapter<>(
  115. MainActivity.this,
  116. android.R.layout.simple_spinner_item,
  117. pPop
  118. );
  119. ad.setDropDownViewResource(
  120. android.R.layout.simple_spinner_dropdown_item
  121. );
  122. pSpn.setAdapter(ad);
  123. }//if
  124. }//populateSpinner
  125.  
  126. void init(){
  127. //assocs
  128. mSpnBrowseMode = findViewById(R.id.idSpnBrowseMode);
  129. mBtnBrowseUrl1 = findViewById(R.id.idBtnVisitUrl1);
  130. mBtnBrowseUrl2 = findViewById(R.id.idBtnVisitUrl2);
  131. mBtnBrowseUrl3 = findViewById(R.id.idBtnVisitUrl3);
  132. mTvResult = findViewById(R.id.idTvResult);
  133.  
  134. //behaviors
  135. String[] aBrowseModes = this.getResources().getStringArray(R.array.a_browse_modes);
  136.  
  137. populateSpinner(
  138. mSpnBrowseMode,
  139. aBrowseModes
  140. );
  141.  
  142. mBtnBrowseUrl1.setOnClickListener(mClickHandler);
  143. mBtnBrowseUrl2.setOnClickListener(mClickHandler);
  144. mBtnBrowseUrl3.setOnClickListener(mClickHandler);
  145.  
  146. exemploDeConsumoDeUrl();
  147. }//init
  148.  
  149. // não vai funcionar porque está síncrona com a main thread
  150. // só funcionará se ASSÍNCRONA da main thread
  151. // como executar isto assincronamente?????
  152. // resposta 1: declarar uma classe nossa que especialize AsyncTask
  153. void exemploDeConsumoDeUrl_vFAIL(){
  154. // android.os.NetworkOnMainThreadException
  155. String strHtml =
  156. AmIoHttp.io_https_ReadAll(
  157. "https://arturmarques.com/edu/ddm/"
  158. );
  159.  
  160. mTvResult.setText(strHtml);
  161. }//exemploDeConsumoDeUrl_vFAIL
  162.  
  163. void exemploDeConsumoDeUrl_deprecated(){
  164. MinhaTarefaAssincrona t = new MinhaTarefaAssincrona();
  165. t.execute("https://arturmarques.com/edu/ddm/");
  166. }//exemploDeConsumoDeUrl_deprecated
  167.  
  168. // versão não deprecated
  169. /*
  170. import java.util.concurrent.ExecutorService;
  171. import java.util.concurrent.Executors;
  172. */
  173. String mResultadoAssincrono;
  174. void exemploDeConsumoDeUrl(){
  175. ExecutorService executor = Executors.newSingleThreadExecutor();
  176. Handler handler = new Handler(Looper.getMainLooper());
  177.  
  178. Runnable atualizarUI = new Runnable() {
  179. @Override
  180. public void run() {
  181. MainActivity.this.mTvResult.setText(mResultadoAssincrono);
  182. }
  183. };//atualizarUI
  184.  
  185. Runnable irBuscarDadosWeb = new Runnable() {
  186. @Override
  187. public void run() {
  188. mResultadoAssincrono = AmIoHttp.io_https_ReadAll("https://arturmarques.com/edu/ddm/");
  189.  
  190. handler.post(atualizarUI);
  191. }
  192. };
  193.  
  194. executor.execute(irBuscarDadosWeb);
  195. }//exemploDeConsumoDeUrl
  196. }//MainActivity
Advertisement
Add Comment
Please, Sign In to add comment