Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.joythis.android.webfavorites;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.loader.content.AsyncTaskLoader;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Looper;
- import android.util.Log;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.Spinner;
- import android.widget.TextView;
- import java.util.Calendar;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class MainActivity extends AppCompatActivity {
- class MinhaTarefaAssincrona extends AsyncTask<String, Void, String>{
- @Override
- protected String doInBackground(String... strings) {
- //código que seja preciso executar em thread própria
- //deve escrever-se aqui
- String url = strings[0];
- return AmIoHttp.io_https_ReadAll(url);
- }//doInBackground
- //automaticamente chamado depois de doInBackground terminar
- @Override
- protected void onPostExecute(String s) {
- super.onPostExecute(s);
- mTvResult.setText(s);
- }//onPostExecute
- }//MinhaTarefaAssincrona
- public final static String KEY_URL = "KEY_URL";
- public final static String PACKAGE_GOOGLE_CHROME =
- "com.android.chrome";
- public final static String PACKAGE_BROWSER_XPTO =
- "com.browser.xpto";
- Spinner mSpnBrowseMode;
- Button mBtnBrowseUrl1, mBtnBrowseUrl2, mBtnBrowseUrl3;
- TextView mTvResult;
- View.OnClickListener mClickHandler = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String webAddress = ((Button)v).getText().toString().trim();
- int browseMode = mSpnBrowseMode.getSelectedItemPosition();
- visitUrl(
- webAddress,
- browseMode
- );
- }
- };//mClickHandler
- void visitUrl(String pUrl, int pMode){
- Uri uriUrl = Uri.parse(pUrl);
- Intent visitUrl;
- switch(pMode) {
- case 0: // via chooser
- visitUrl = new Intent(Intent.ACTION_VIEW);
- visitUrl.setData(uriUrl);
- /*
- aparece um "chooser" - um diálogo em que o user
- é perguntado com qual app (de entre várias disponíveis)
- pretende fazer a ação
- */
- startActivity(visitUrl);
- break;
- case 1: // via chrome package (potencial de falha)
- try {
- visitUrl = new Intent(Intent.ACTION_VIEW);
- visitUrl.setData(uriUrl);
- visitUrl.setPackage(PACKAGE_GOOGLE_CHROME);
- startActivity(visitUrl);
- }
- catch (Exception e){
- Log.e("@visitUrl", e.toString());
- }
- case 2: // via in-app web browser
- visitUrl = new Intent(
- MainActivity.this,
- MyWebBrowser.class
- );
- visitUrl.putExtra(
- KEY_URL, pUrl
- );
- startActivity(visitUrl);
- break;
- }//switch
- }//visitUrl
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.rl_web_favorites);
- init();
- }
- void populateSpinner(Spinner pSpn, String[] pPop){
- if(pSpn!=null){
- ArrayAdapter<String> ad = new ArrayAdapter<>(
- MainActivity.this,
- android.R.layout.simple_spinner_item,
- pPop
- );
- ad.setDropDownViewResource(
- android.R.layout.simple_spinner_dropdown_item
- );
- pSpn.setAdapter(ad);
- }//if
- }//populateSpinner
- void init(){
- //assocs
- mSpnBrowseMode = findViewById(R.id.idSpnBrowseMode);
- mBtnBrowseUrl1 = findViewById(R.id.idBtnVisitUrl1);
- mBtnBrowseUrl2 = findViewById(R.id.idBtnVisitUrl2);
- mBtnBrowseUrl3 = findViewById(R.id.idBtnVisitUrl3);
- mTvResult = findViewById(R.id.idTvResult);
- //behaviors
- String[] aBrowseModes = this.getResources().getStringArray(R.array.a_browse_modes);
- populateSpinner(
- mSpnBrowseMode,
- aBrowseModes
- );
- mBtnBrowseUrl1.setOnClickListener(mClickHandler);
- mBtnBrowseUrl2.setOnClickListener(mClickHandler);
- mBtnBrowseUrl3.setOnClickListener(mClickHandler);
- exemploDeConsumoDeUrl();
- }//init
- // não vai funcionar porque está síncrona com a main thread
- // só funcionará se ASSÍNCRONA da main thread
- // como executar isto assincronamente?????
- // resposta 1: declarar uma classe nossa que especialize AsyncTask
- void exemploDeConsumoDeUrl_vFAIL(){
- // android.os.NetworkOnMainThreadException
- String strHtml =
- AmIoHttp.io_https_ReadAll(
- "https://arturmarques.com/edu/ddm/"
- );
- mTvResult.setText(strHtml);
- }//exemploDeConsumoDeUrl_vFAIL
- void exemploDeConsumoDeUrl_deprecated(){
- MinhaTarefaAssincrona t = new MinhaTarefaAssincrona();
- t.execute("https://arturmarques.com/edu/ddm/");
- }//exemploDeConsumoDeUrl_deprecated
- // versão não deprecated
- /*
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- */
- String mResultadoAssincrono;
- void exemploDeConsumoDeUrl(){
- ExecutorService executor = Executors.newSingleThreadExecutor();
- Handler handler = new Handler(Looper.getMainLooper());
- Runnable atualizarUI = new Runnable() {
- @Override
- public void run() {
- MainActivity.this.mTvResult.setText(mResultadoAssincrono);
- }
- };//atualizarUI
- Runnable irBuscarDadosWeb = new Runnable() {
- @Override
- public void run() {
- mResultadoAssincrono = AmIoHttp.io_https_ReadAll("https://arturmarques.com/edu/ddm/");
- handler.post(atualizarUI);
- }
- };
- executor.execute(irBuscarDadosWeb);
- }//exemploDeConsumoDeUrl
- }//MainActivity
Advertisement
Add Comment
Please, Sign In to add comment