Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Error:(1, 1) error: illegal character: '\ufeff'

Olá! Estou tentando executar o projeto da Agenda que importei e da os seguintes erros no Message Gradle Build:

C:\Users\user\AndroidStudioProjects\Agenda\app\src\main\java\br\com\alura\agenda\FormularioActivity.java

Error:(1, 1) error: illegal character: '\ufeff' Error:(1, 10) error: class, interface, or enum expected Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

Compilation failed; see the compiler error output for details.

Alguém sabe explicar por que acontece isso, pois eu conseguia executar sem problemas?

6 respostas

Victor, tudo bem ?

Cara verifica a estrutura de pacotes, parece que pode ter algum problema nisso.

Abraços

Obrigado Matheus! Acho que não deve ser isso, pois eu apenas importei o mesmo projeto que eu ja havia feito. Eu importei o mesmo projeto, pois eu tentei fazer modificações nele antes. Então tentei deixar como estava antes.

E essa classe está correta ? Não tem nenhum erro nela ?

Está sim, nenhum erro. Segue código.

package br.com.alura.agenda;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;

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

public class FormularioActivity extends AppCompatActivity {

    public static final int CODIGO_CAMERA = 567;
    // instancia da classe FormularioHelper e o atributo helper.
    private FormularioHelper helper;
    private String caminhoFoto;

    // Os campos do formulário são definidos no XML activity_formulario.xml
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);

        //Novo FormularioHelper, passando como parametro o this, que é uma referência para FormularioActivity.
        helper = new FormularioHelper (this);

        //Recuperando a Intent passada pelo ListaAlunosActivity.
        Intent intent = getIntent();
        Aluno aluno = (Aluno) intent.getSerializableExtra("aluno");
        if (aluno != null){
            helper.preencheFormulario(aluno);
        }

        //Referencia para o botão da foto.
        Button botaoFoto = (Button) findViewById(R.id.formulario_botao_foto);
        botaoFoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Intenção de ir para a Camera.
                Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                // Determinando o caminho da Foto, salvando na pasta da aplicação.
                caminhoFoto = getExternalFilesDir(null) +"/"+ System.currentTimeMillis() +".jpg";
                // Criação do arquivo Foto
                File arquivoFoto = new File(caminhoFoto);
                // MediaStore.EXTRA_OUTPUT é a chave do caminho determinado por todos os aplicativos de foto.
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(arquivoFoto));
                startActivityForResult(intentCamera, CODIGO_CAMERA);
            }
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // abrir a foto tirada
        if(requestCode == Activity.RESULT_OK){
            if(requestCode == CODIGO_CAMERA){
                //Referencia para ImageView(Foto)

                helper.carregaImagem(caminhoFoto);

            }
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);
    }

    // Método do menu salvar na parte superior do Formulário de inclusão de alunos.
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaAluno();
                AlunoDao dao = new AlunoDao(this);

                if(aluno.getId() != null){
                    dao.altera(aluno);
                    Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " Alterado!", Toast.LENGTH_SHORT).show();
                }else{
                    Log.d("CREATE", "Vai inserir aluno");
                    dao.insere(aluno);
                    Log.d("CREATE", "Inseriu com sucesso");

                    Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " Salvo!", Toast.LENGTH_SHORT).show();
                }
                dao.close();
                finish();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}
solução!

Victor, acredito que tenha um BOM no inicio do seu arquivo.

Para resolver você precisa abrí-lo em um editor de texto e Salvar como "UTF-8 sem BOM" (ou "UTF-8 without BOM").

Acredito que o Notepad++ e o Sublime tenham essa opção.

Consegui resolver. Segui a mesma linha de salvar o arquivo. Mas salvei ele com ANSI no Salvar como... do bloco de notas. Quando abri o Android Studio apareceu um informe em rosa na parte superior da classe FormularioActivity dizendo que o formato estava diferente de UTF-8 e tinha um link ao lado. Abrindo o link aparecia uma caixa de dialogo com opções de Reload ou Converter. Fiz um Reload escolhendo UTF-8. Rodei a aplicação e abriu no celular. Antes a aplicação rodava, mas aparecia esses erros do tópico que fiz. Agora ela abre no emulador direto e não aparece mais o erro. Caso o procedimento esteja correto agradeço a dica Michel!