7
respostas

Clico na opção abrir site e o aplicativo fecha

Quando vou efetuar o teste, a aplicação sobe e funciona até eu clicar em abrir site, quando eu clico, simplesmente a aplicação fecha.

package br.com.alura.agenda;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Browser;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.List;

import br.com.alura.agenda.dao.AlunoDAO;
import br.com.alura.agenda.modelo.Aluno;

public class ListaAlunosActivity extends AppCompatActivity {

    private ListView listaAlunos;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        listaAlunos = (ListView) findViewById(R.id.Lista_alunos);

        listaAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> lista, View item, int position, long l) {
                Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(position);

                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, formularioActivity.class);
                intentVaiProFormulario.putExtra("aluno", aluno);
                startActivity(intentVaiProFormulario);

            }
        });

        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, formularioActivity.class);
                startActivity(intentVaiProFormulario);
            }
        });

        registerForContextMenu(listaAlunos);
    }

    private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();



        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        carregaLista();
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        final Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);

        MenuItem itemSite = menu.add("Visitar site");
        Intent intentSite = new Intent(Intent.ACTION_VIEW);




        String site = aluno.getSite();
        if (!site.startsWith("https://")){
            site = "https://" + site;
        }

        intentSite.setData(Uri.parse(site));
        itemSite.setIntent(intentSite);

        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {

                AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                dao.deleta(aluno);
                dao.close();

                carregaLista();
                return false;
            }
        });


    }
}
7 respostas

Oi Aroldo, tudo bem ?

Cara qual é o erro que está levando ?

Na verdade não da erro, simplesmente sai da aplicação. se isso ajudar...

07-26 19:07:16.313 4268-4268/br.com.alura.agenda E/AndroidRuntime: FATAL EXCEPTION: main
    Process: br.com.alura.agenda, PID: 4268
    android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
        at android.app.ContextImpl.startActivity(ContextImpl.java:912)
        at android.app.ContextImpl.startActivity(ContextImpl.java:888)
        at android.content.ContextWrapper.startActivity(ContextWrapper.java:379)
        at android.content.ContextWrapper.startActivity(ContextWrapper.java:379)
        at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:159)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:923)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:913)
        at com.android.internal.view.menu.MenuPopup.onItemClick(MenuPopup.java:128)
        at android.widget.AdapterView.performItemClick(AdapterView.java:318)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1159)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3136)
        at android.widget.AbsListView.onTouchUp(AbsListView.java:4064)
        at android.widget.AbsListView.onTouchEvent(AbsListView.java:3822)
        at android.widget.DropDownListView.onTouchEvent(DropDownListView.java:116)
        at android.view.View.dispatchTouchEvent(View.java:12513)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3024)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2705)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
        at android.widget.PopupWindow$PopupDecorView.dispatchTouchEvent(PopupWindow.java:2407)
        at android.view.View.dispatchPointerEvent(View.java:12752)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5107)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4910)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4427)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4480)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4446)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4586)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4454)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4643)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4427)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4480)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4446)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4454)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4427)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7093)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7062)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7023)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7196)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:326)
        at android.os.Looper.loop(Looper.java:160)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-26 19:07:16.441 4268-4268/br.com.alura.agenda I/Process: Sending signal. PID: 4268 SIG: 9

Faz um teste ?

MenuItem itemSite = menu.add("Visitar site");
        Intent intentSite = new Intent(Intent.ACTION_VIEW);

       intentSite.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);



        String site = aluno.getSite();
        if (!site.startsWith("https://")){
            site = "https://" + site;
        }

        intentSite.setData(Uri.parse(site));
        itemSite.setIntent(intentSite);

Agora funcionou, mas foi algo que eu fiz errado na aplicação?

Não, nenhum problema no seu código.

Consegue me falar um pouco do seu ambiente, você está rodando o sistema em qual versão do android ?

Nexus 4 API 28 (Android 9, API 28)

Acho que o problema deve ser a versão do android, está usando uma versão que está em teste ainda.

Não é aconselhavel usa-la pra testes de apps.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software