[Android] Ao tentar abrir uma Activity, uma NullPointerException é lançada

Oi gente, quando tento abrir a Activity abaixo uma NullPointerException é lançada e ela aponta para as linhas 109 e 136. Alguém sabe a causa dessa exceção??

Agradeço desde já.

package contact.list.aniversario;

import java.lang.reflect.Array;
import java.util.Calendar;
import java.util.List;

import contact.list.ListarContatos;
import contact.list.R;
import contact.list.auxiliares.Contato;
import contact.list.auxiliares.LerGravarExcluirScript;
import contact.list.auxiliares.MetodosAuxiliares;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.Dialog;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class ListaAniversario extends Activity {
	
	List<Contato> contatos;
	List<Contato> datasDeAniversarioDosContatos;
	List<Contato> contatosAniversariantes;	
	
	LerGravarExcluirScript acoesBancoDados;
	
	String [] nomes;
	String [] dias = new String [] {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", 
		                            "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
		                            "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"};
	String [] meses = new String [] {"Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", 
			                         "Out", "Nov", "Dez"};
	
	Contato obj;
	Contato obj2;
	Contato contato;
	Contato cont;
	
	ListView listViewNomesEDatas;
	ListView listViewAniversariantes;
	
	Spinner names;
	Spinner days;
	Spinner months;
	Spinner spinnerDaysDialog;
	Spinner spinnerMonthsDialog;
	
	String nomeEscolhido;
	String diaEscolhido;
	String mesEscolhido;	
			
	Dialog dialogEditarAniversario;
	Dialog dialogBotoesParabenizar;	
	Dialog addAniversarios;
	
	MetodosAuxiliares auxiliar = new MetodosAuxiliares();
	
	boolean processoEnviarSMS = false;
	boolean processoEnviarEmail = false;
	
	View linha;
    ImageView bolo;
    TextView aviso;
	
	@Override
    public void onCreate(Bundle savedInstanceState) { 
    	
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lista_aniversario);
        
        listViewNomesEDatas = (ListView) findViewById(R.id.listViewNomesEDatas);
        listViewAniversariantes = (ListView) findViewById(R.id.listViewAniversariantes);
        linha = (View) findViewById(R.id.linha);
        bolo = (ImageView) findViewById(R.id.cakeImage);
        aviso = (TextView) findViewById(R.id.avisoTxt);
        
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.cancel(R.string.app_name);
        
        acoesBancoDados = new LerGravarExcluirScript(this);                                         	
        contatos = acoesBancoDados.listarContatos();
        int tamanho = contatos.size();
        nomes = new String[tamanho];
        for(int i = 0; i < tamanho; i++) {
        	obj = contatos.get(i);
			String s = obj.getNome();
			nomes[i] = s;
        }

        preencherListViews();
                        
	}
	
	private void preencherListViews() {
		
		//Retorna dados da tabela 2(aniversariantes)
		datasDeAniversarioDosContatos = acoesBancoDados.listarAniversarios();       
                        
        /*Agenda um alarme que será executado a cada 24 horas, esse alarme chamará a classe ServicoAniversario, 
         *que checará se tem alguém aniversariando naquele dia.*/
        if(datasDeAniversarioDosContatos.size() == 1){
        	agendarAlarme();       	        	
        }
                                        
        listViewNomesEDatas.setAdapter(new ListaAniversarioAdapter(this, datasDeAniversarioDosContatos)); 
        listViewNomesEDatas.setOnItemClickListener(new EditarAniversarios());
                                       
        //"auxiliar" é objeto da classe MetodosAuxiliares.
        contatosAniversariantes = auxiliar.listaContatosAniversariantes(datasDeAniversarioDosContatos.size(), contato, datasDeAniversarioDosContatos);
                				                        
        listViewAniversariantes.setAdapter(new ListaAniversarioAdapterAniversariantes(this, contatosAniversariantes)); 
        listViewAniversariantes.setOnItemClickListener(new ListViewAniversariantesHandler());                                        
        
        if(datasDeAniversarioDosContatos.size() == 0) {
        	listViewAniversariantes.setVisibility(ListView.GONE);
        	listViewNomesEDatas.setVisibility(ListView.GONE);
        	linha.setVisibility(View.GONE);
        	bolo.setVisibility(ImageView.VISIBLE);
        	aviso.setVisibility(TextView.VISIBLE);
        }else if(datasDeAniversarioDosContatos.size() >= 1) {
        	if(contatosAniversariantes.size() >= 1) {        	
            	listViewAniversariantes.setVisibility(ListView.VISIBLE);
            }
        	listViewNomesEDatas.setVisibility(ListView.VISIBLE);
        	linha.setVisibility(View.VISIBLE);
        	bolo.setVisibility(ImageView.GONE);
        	aviso.setVisibility(TextView.GONE);
        }
		
	}
	
	public boolean onCreateOptionsMenu(Menu menu){   	
    	MenuInflater inflater = getMenuInflater();
    	inflater.inflate(R.menu.menu_aniversarios, menu);
    	return true;    	
    }
    
    public boolean onOptionsItemSelected(MenuItem item){
    	
    	switch(item.getItemId()){
    	
    	case R.id.gravar:
    		addAniversarios = new Dialog(this);
    		addAniversarios.setContentView(R.layout.add_aniversarios);
    		addAniversarios.setTitle("Add Birthday");
    		addAniversarios.setCancelable(true);
			
    		ArrayAdapter<String> spinnerNomesConteudo = new ArrayAdapter<String>(this,R.layout.list_white_text,R.id.list_content, nomes);
            spinnerNomesConteudo.setDropDownViewResource(R.layout.list_black_text);
            names = (Spinner) addAniversarios.findViewById(R.id.spinnerNomes);
            names.setAdapter(spinnerNomesConteudo);
            names.setOnItemSelectedListener(new OnItemSelectedListenerNames());
                    
            ArrayAdapter<String> spinnerDiasConteudo = new ArrayAdapter<String>(this,R.layout.list_white_text,R.id.list_content, dias);
            spinnerDiasConteudo.setDropDownViewResource(R.layout.list_black_text);
            days = (Spinner) addAniversarios.findViewById(R.id.spinnerDias);
            days.setAdapter(spinnerDiasConteudo);
            days.setOnItemSelectedListener(new OnItemSelectedListenerDays());
                    
            ArrayAdapter<String> spinnerMesesConteudo = new ArrayAdapter<String>(this,R.layout.list_white_text,R.id.list_content, meses);
            spinnerMesesConteudo.setDropDownViewResource(R.layout.list_black_text);
            months = (Spinner) addAniversarios.findViewById(R.id.spinnerMeses);
            months.setAdapter(spinnerMesesConteudo);
            months.setOnItemSelectedListener(new OnItemSelectedListenerMonths());
	        
	        Button buttonBuscar = (Button) addAniversarios.findViewById(R.id.gravarBtn);
	        buttonBuscar.setOnClickListener(new GravarAniversario());
			
	        Button buttonCancelar = (Button) addAniversarios.findViewById(R.id.cancelarBtn);
	        buttonCancelar.setOnClickListener(new BotaoCancelar());
	        				
	        addAniversarios.show();
    		return true;
    		    	    		    		    		
    	case R.id.voltar:
    		Intent it = new Intent (this, ListarContatos.class);
    		startActivity(it);
    		finish();    		
    		return true;
    		
    	case R.id.sair:
    		finish();    		
    		return true;
    		
    	default:   		
    		return false;
    	}
    }
    
    private class GravarAniversario implements OnClickListener {
		public void onClick(View v) {
			
			if(nomeEscolhido != null) {
				addAniversarios.dismiss();
				acoesBancoDados.inserirAniversario(nomeEscolhido, diaEscolhido, mesEscolhido);			
				preencherListViews();
				Toast.makeText(ListaAniversario.this, "Birthday successfully added!", Toast.LENGTH_LONG).show();
			}else{
				Toast.makeText(ListaAniversario.this, "Please add a contact first.", Toast.LENGTH_LONG).show();
			}
			
		}    	
    }
    
    private class BotaoCancelar implements OnClickListener {
		public void onClick(View v) {
			addAniversarios.dismiss();
		}    	
    }				
			
	public class OnItemSelectedListenerNames implements OnItemSelectedListener {
		public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
			nomeEscolhido = names.getSelectedItem().toString();			
		}
		public void onNothingSelected(AdapterView<?> parent) {}				
	}
	
	public class OnItemSelectedListenerDays implements OnItemSelectedListener {
		public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
			diaEscolhido = days.getSelectedItem().toString();			
		}
		public void onNothingSelected(AdapterView<?> parent) {}				
	}
	
	public class OnItemSelectedListenerMonths implements OnItemSelectedListener {
		public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
			mesEscolhido = months.getSelectedItem().toString();			
		}
		public void onNothingSelected(AdapterView<?> parent) {}				
	}
			
	private class EditarAniversarios implements OnItemClickListener, OnClickListener {	
		
		Button editarButton;
		Button sairButton;		
		
		public void onItemClick(AdapterView<?> parent, View view, int posicao, long identification) {
			
			cont = (Contato) listViewNomesEDatas.getAdapter().getItem(posicao);								
			
			dialogEditarAniversario = new Dialog(ListaAniversario.this);
			dialogEditarAniversario.setContentView(R.layout.editar_aniversario_dialog_layout);
			dialogEditarAniversario.setTitle("Edit Birthday");
			dialogEditarAniversario.setCancelable(true);
			
	        TextView nome = (TextView) dialogEditarAniversario.findViewById(R.id.nome); 
	        nome.setText(cont.getNomeTabelaAniversario());
	        	        			
	        spinnerDaysDialog = (Spinner) dialogEditarAniversario.findViewById(R.id.spinnerDias);
	        ArrayAdapter<String> spinnerDiasConteudo = new ArrayAdapter<String>(ListaAniversario.this,R.layout.list_black_text,R.id.list_content, dias);
	        spinnerDiasConteudo.setDropDownViewResource(R.layout.list_black_text);
	        spinnerDaysDialog.setAdapter(spinnerDiasConteudo);
	        spinnerDaysDialog.setOnItemSelectedListener(new EditarDiaAniversario());
	        
	        int ArraySize = Array.getLength(dias); //get the size of the array
	        for (int i = 0; i < ArraySize; i++) {
	            if (dias[i].equals(cont.getDiaAniversario())) {
	            	spinnerDaysDialog.setSelection(i, true); //faz com que já fique selecionado o dia atual do aniversário da pessoa
	            	break;
	            }
	        }	        
	        
	        spinnerMonthsDialog = (Spinner) dialogEditarAniversario.findViewById(R.id.spinnerMeses);
	    	ArrayAdapter<String> spinnerMesesConteudo = new ArrayAdapter<String>(ListaAniversario.this,R.layout.list_black_text,R.id.list_content, meses);
	        spinnerMesesConteudo.setDropDownViewResource(R.layout.list_black_text);
	        spinnerMonthsDialog.setAdapter(spinnerMesesConteudo);
	        spinnerMonthsDialog.setOnItemSelectedListener(new EditarMesAniversario());
	        
	        int ArraySize2 = Array.getLength(meses); //get the size of the array
	        for (int i = 0; i < ArraySize2; i++) {
	            if (meses[i].equals(cont.getMesAniversario())) {
	            	spinnerMonthsDialog.setSelection(i, true); //faz com que já fique selecionado o mês atual do aniversário da pessoa
	            	break;
	            }
	        }
	        
	        editarButton = (Button) dialogEditarAniversario.findViewById(R.id.editarBtn);
	        editarButton.setOnClickListener(this);
	        
	        sairButton = (Button) dialogEditarAniversario.findViewById(R.id.cancelBtn);
	        sairButton.setOnClickListener(this);
	        				
	        dialogEditarAniversario.show();
									
		}				

		public void onClick(View v) {
			
			if(v == editarButton){
				dialogEditarAniversario.dismiss();
				cont.setDiaAniversario(diaEscolhido);
				cont.setMesAniversario(mesEscolhido);
				int numLinhasAfetadas = acoesBancoDados.editarAniversario(cont);	
				if(numLinhasAfetadas >= 1) {
					Toast.makeText(ListaAniversario.this, "Birthday successfully edited!", Toast.LENGTH_LONG).show();
				}else if(numLinhasAfetadas == 0) {
					Toast.makeText(ListaAniversario.this, "Birthday not found.", Toast.LENGTH_LONG).show();
				}
				preencherListViews();
				
			}else if(v == sairButton){
				dialogEditarAniversario.dismiss();
			}												
		}
					
	}
	
	private class EditarDiaAniversario implements OnItemSelectedListener {
		public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
			diaEscolhido = spinnerDaysDialog.getSelectedItem().toString();			
		}
		public void onNothingSelected(AdapterView<?> parent) {}		
	}
	
	private class EditarMesAniversario implements OnItemSelectedListener {
		public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
			mesEscolhido = spinnerMonthsDialog.getSelectedItem().toString();			
		}
		public void onNothingSelected(AdapterView<?> parent) {}		
	}
	
	private class ListViewAniversariantesHandler implements OnItemClickListener, OnClickListener {
				
		String nomeAniversariante;
		String emailAniversariante;
		String mobileAniversariante;
		String foneCasaAniversariante;
		String foneTrabalhoAniversariante;						
		
		ImageButton call;
		ImageButton sms;
		ImageButton email;
				
		Dialog escolherTelefone;
		
		Button fechar;								
		
		Contato contato;		
		
		public void onItemClick(AdapterView<?> parent, View view, int posicao, long identification) {
			
			//Pega o item do ListView que foi clicado:
			cont = (Contato) listViewAniversariantes.getAdapter().getItem(posicao);
			nomeAniversariante = cont.getNomeTabelaAniversario();
			
			int tamanho = contatos.size();
	        
			//Pega os dados do item do ListView que foi clicado:
	        for(int i = 0; i < tamanho; i++) {
	        	contato = contatos.get(i);
				String s = contato.getNome();
				if(s.equals(nomeAniversariante)){
					mobileAniversariante = contato.getMobile();
					foneCasaAniversariante = contato.getFoneCasa();
					foneTrabalhoAniversariante = contato.getFoneTrabalho();
					emailAniversariante = contato.getEmail();
					break;
				}				
	        }									 
			
			dialogBotoesParabenizar = new Dialog(ListaAniversario.this);
			dialogBotoesParabenizar.setContentView(R.layout.botoes_dialog_layout);
			dialogBotoesParabenizar.setTitle("Congratulate!");
			dialogBotoesParabenizar.setCancelable(true);
	        
	        call = (ImageButton) dialogBotoesParabenizar.findViewById(R.id.callBtn);
	        call.setOnClickListener(new CallButton());
	        
	        sms = (ImageButton) dialogBotoesParabenizar.findViewById(R.id.smsBtn);
	        sms.setOnClickListener(this);
	        
	        email = (ImageButton) dialogBotoesParabenizar.findViewById(R.id.emailBtn);
	        email.setOnClickListener(this);
	        
	        fechar = (Button) dialogBotoesParabenizar.findViewById(R.id.fecharBtn);
	        fechar.setOnClickListener(this);
	        
	        dialogBotoesParabenizar.show();
			
		}
		
		//Lida com o evento de clicar no call button do dialogBotoesParabenizar. 
		private class CallButton implements OnClickListener {
									
			public void onClick(View v) {
				
				dialogBotoesParabenizar.dismiss();
				
				escolherTelefone = new Dialog(ListaAniversario.this);
				escolherTelefone.setContentView(R.layout.escolher_telefone);
				escolherTelefone.setTitle("Choose a fone number");
				escolherTelefone.setCancelable(true);
				
				Button mobileBtn = (Button) escolherTelefone.findViewById(R.id.mobileBtn);
				mobileBtn.setText(mobileAniversariante);
				mobileBtn.setOnClickListener(new LigarMobile());
				
				Button foneCasaBtn = (Button) escolherTelefone.findViewById(R.id.foneCasaBtn);
				foneCasaBtn.setOnClickListener(new LigarCasa());
				foneCasaBtn.setText(foneCasaAniversariante);
				
				Button foneTrabalhoBtn = (Button) escolherTelefone.findViewById(R.id.foneTrabalhoBtn);
				foneTrabalhoBtn.setOnClickListener(new LigarTrabalho());
				foneTrabalhoBtn.setText(foneTrabalhoAniversariante);
				
				Button cancelar = (Button) escolherTelefone.findViewById(R.id.cancelarBtn);
				cancelar.setOnClickListener(new Cancelar());
				
				ImageView casa = (ImageView) escolherTelefone.findViewById(R.id.casa_grande);
				ImageView work_place = (ImageView) escolherTelefone.findViewById(R.id.worker_grande);				
				
				//Mobile + Casa:
				if(!foneCasaAniversariante.equals("") && foneTrabalhoAniversariante.equals("")) {
					foneTrabalhoBtn.setVisibility(Button.GONE);
					work_place.setVisibility(ImageView.GONE);					
					escolherTelefone.show();
				}
				
				//Mobile + Trabalho:
				if(foneCasaAniversariante.equals("") && !foneTrabalhoAniversariante.equals("")) {
					foneCasaBtn.setVisibility(Button.GONE);
					casa.setVisibility(ImageView.GONE);					
					escolherTelefone.show();
				}
										
				//Mobile + Casa + Trabalho:
				if(!foneCasaAniversariante.equals("") && !foneTrabalhoAniversariante.equals("")) {				
					escolherTelefone.show();
				}
				
				//Só Mobile:
				if(foneCasaAniversariante.equals("") && foneTrabalhoAniversariante.equals("")) {				
					Intent intencao = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:000000" + mobileAniversariante)); 
					startActivity(intencao);
				}
				
			}
							
			private class LigarMobile implements OnClickListener {
				public void onClick(View v) {
					Intent intencao = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:000000" + mobileAniversariante)); 
					startActivity(intencao);				
					escolherTelefone.dismiss();					
				}				
			}
			
			private class LigarCasa implements OnClickListener {
				public void onClick(View v) {
					Intent intencao = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:000000" + foneCasaAniversariante)); 
					startActivity(intencao);				
					escolherTelefone.dismiss();					
				}				
			}
			
			private class LigarTrabalho implements OnClickListener {
				public void onClick(View v) {
					Intent intencao = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:000000" + foneTrabalhoAniversariante)); 
					startActivity(intencao);				
					escolherTelefone.dismiss();					
				}				
			}
			
			private class Cancelar implements OnClickListener {
				public void onClick(View v) {								
					escolherTelefone.dismiss();					
				}				
			}
			
		}
		
		//Lida com o evento de clicar no sms button e no e-mail button do dialogBotoesParabenizar.
		//Para enviar SMS e E-mail, usam-se apps já existentes no celular do usuário, nativos ou não.
		public void onClick(View v) {
			if(v == sms){
				dialogBotoesParabenizar.dismiss();
				Thread processoParalelo = new Thread(new BotaoSMSAniversariante());
				processoEnviarSMS = true;
				processoParalelo.start();								
			}else if(v == email){
				dialogBotoesParabenizar.dismiss();
				Thread processoParalelo = new Thread(new BotaoEmailAniversariante());
				processoEnviarEmail = true;
				processoParalelo.start();
			}else if(v == fechar){
				dialogBotoesParabenizar.dismiss();
			}
		}
		
		private class BotaoSMSAniversariante implements Runnable {
			public void run() {
				if (processoEnviarSMS) {		
					//Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + mobileAniversariante));
					Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + 5556));
					startActivity(Intent.createChooser(smsIntent, "Send SMS in:"));
				}								
			}			
		}
		
		private class BotaoEmailAniversariante implements Runnable {
			public void run() {
				if (processoEnviarEmail) {		
					Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
					//String [] emailTo = new String[]{emailAniversariante};
			        String [] emailTo = new String[]{"nissi-miranda@bol.com.br"};
			        //String emailSubject = "Subject";
			        //String emailBody = "Some HTML goes here.";
			        emailIntent.setType("text/html");
			        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, emailTo);
			        //emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,emailSubject);
			        //emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(emailBody).toString());
			        startActivity(Intent.createChooser(emailIntent, "Send email in:"));
				}								
			}			
		}
				
	}
			
	private void agendarAlarme() {
		
		Intent it = new Intent("SERVICO_ANIVERSARIO");
		PendingIntent p = PendingIntent.getService(this, 0, it, 0);
		int tempoRepetir = 86400 * 1000; //Corresponde a 24 horas
		int delay = 10800 * 1000; //Corresponde a 3 horas
		
		AlarmManager alarme = (AlarmManager) getSystemService(ALARM_SERVICE);

		Calendar c = Calendar.getInstance();
		c.setTimeInMillis(System.currentTimeMillis());
		c.add(Calendar.MILLISECOND, delay);
		long time = c.getTimeInMillis();
								
		//O primeiro alarme será lançado em 3 horas e depois se repetirá a cada 24 horas
		alarme.setRepeating(AlarmManager.RTC_WAKEUP, time, tempoRepetir, p);						
								
	}
	
	protected void onDestroy() {
		//Fecha o Banco de Dados
		acoesBancoDados.fechar();
		if(processoEnviarSMS) {
			processoEnviarSMS = false;						
		}
		if(processoEnviarEmail) {
			processoEnviarEmail = false;						
		}
		super.onDestroy();			
	}
	
}

sua variável linha está com valor nulo.

Na atribuição:

o metodo findViewById não esta encotrando a view com id R.id.linha.

Verifique seu XML, se estiver correto, tente dar “Project > Clean”

O xml tá certo, já tentei limpar, mas não funciona. Tô começando a achar que é um bug.

Bom,
o NullPointerException é lançada pq a variavel linha está nula.

Pf, faça Debug na linha 92 para ter certeza que o metódo findViewById retornando a View desejada.

na aba ActivityThread.perfo apareceu em [color=red]Source not found. [/color] Mas eu não entendo porque não foi achada. Os nomes dos ids estão corretos, os ListViews dessa mesma activity estão sendo encontrados, os ids estão aparecendo no R.java…

Sua id no xml está como no exemplo abaixo?

Verifica também se para instânciar uma view personalizada se usa um cast (View).
[]'s

Tá sim Felipe. Aliás, estava dando problema não só na variável linha, mas também nas variáveis “bolo” e “aviso”.
Outra coisa: agora tem uma outra activity tendo esse exato mesmo problema, sendo que ela tava abrindo normal quando o primeiro problema estava acontecendo e ontem, antes de ontem etc… Acho que o meu Eclipse enloqueceu @_@

Cria um novo workspace e importa o projeto então.

nissivm,

tb não tenho ideia do que seja.
Esses erros acontecem quando vc altera os xml e não dá clean. Mas vc disse que já deu neh…

:roll:

Olá,
Você está com id em duplicidade.
deve ter dois layouts com views com mesmo id.

É gente, eu tentei tudo que foi sugerido mas não deu certo, é um mistério. Ainda bem que não é algo essencial no meu aplicativo. A única diferença entre essa Activity que não está dando certo e a que está dando certo é que a primeira só tem 1 ListView e a segunda tem 2, anyway, presciso dessas duas ListViews, então… De qq, forma não sei se essa é a raiz do problema.

Obrigada pelas sugestões.

A Activity que funciona está na mesma app ou numa cópia do projeto?
Se estiver na mesma, posta o código até o onCreate(inclusive)

Tá na mesma app, aí vai ela:

package contact.list;

import java.util.List;

import contact.list.aniversario.ListaAniversarios;
import contact.list.aniversario.ListaSemAniversarios;
import contact.list.auxiliares.Contato;
import contact.list.auxiliares.ContatosListAdapter;
import contact.list.auxiliares.LerGravarExcluirScript;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;

import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class ListarContatos extends Activity implements OnItemClickListener {
	
	List<Contato> contatos;	
	List<Contato> datasDeAniversarioDosContatos;
	ListView listViewContatos;
	LerGravarExcluirScript acoesBancoDados;
	Dialog buscarContatoDialog;	
	EditText search;
	Contato obj;
	TextView aviso;
	ImageView img;
	View linha;
	Intent niver;
		    
    @Override
    public void onCreate(Bundle savedInstanceState) { 
    	
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listar_contatos);
        
        aviso = (TextView) findViewById(R.id.avisoTxt);
        img = (ImageView) findViewById(R.id.foneImage);
                        
        listViewContatos = (ListView) findViewById(R.id.contatosListView);                                       
        acoesBancoDados = new LerGravarExcluirScript(this);                                         	
        contatos = acoesBancoDados.listarContatos();
        
        linha = (View) findViewById(R.id.linha);
        if(contatos.size() == 0) {
        	linha.setVisibility(TextView.GONE);
        	aviso.setVisibility(TextView.VISIBLE);
        	img.setVisibility(ImageView.VISIBLE);
        }else{
        	linha.setVisibility(TextView.VISIBLE);
        	aviso.setVisibility(TextView.GONE);
        	img.setVisibility(ImageView.GONE);
        }
        
        listViewContatos.setAdapter(new ContatosListAdapter(this, contatos)); 
        listViewContatos.setOnItemClickListener(this);                
        	                                              
    }
    
    public boolean onCreateOptionsMenu(Menu menu){   	
    	MenuInflater inflater = getMenuInflater();
    	inflater.inflate(R.menu.menu_listar_contatos, menu);
    	return true;    	
    }
    
    public boolean onOptionsItemSelected(MenuItem item){
    	
    	switch(item.getItemId()){
    	
    	case R.id.novo_contato:
    		Intent novo = new Intent (this, IncluirContato.class);
    		startActivity(novo);
    		finish();
    		return true;
    		
    	case R.id.buscar_contato:    		
    		buscarContatoDialog = new Dialog(this);
    		buscarContatoDialog.setContentView(R.layout.buscar_dialog_layout);
    		buscarContatoDialog.setTitle("Search Contact");
    		buscarContatoDialog.setCancelable(true);
			
	        search = (EditText) buscarContatoDialog.findViewById(R.id.search); 
	        
	        Button buttonBuscar = (Button) buscarContatoDialog.findViewById(R.id.buscarBtn);
	        buttonBuscar.setOnClickListener(new BotaoBuscar());
			
	        Button buttonCancelar = (Button) buscarContatoDialog.findViewById(R.id.cancelarBtn);
	        buttonCancelar.setOnClickListener(new BotaoCancelar());
	        				
	        buscarContatoDialog.show();
    		return true;
    		
    	case R.id.aniversarios:
    		datasDeAniversarioDosContatos = acoesBancoDados.listarAniversarios();
    		if(datasDeAniversarioDosContatos.size() >= 1) {
    			niver = new Intent (this, ListaAniversarios.class);
    	    }else if (datasDeAniversarioDosContatos.size() == 0) {
    	    	niver = new Intent (this, ListaSemAniversarios.class);
    	    }    		
    		startActivity(niver);
    		finish();    		
    		return true;
    		
    	case R.id.sair:
    		finish();    		
    		return true;
    		
    	default:   		
    		return false;
    	}
    }
    
    protected class BotaoCancelar implements OnClickListener {

		public void onClick(View v) {
			buscarContatoDialog.dismiss();			
		}
		
	}
	
	protected class BotaoBuscar implements OnClickListener {

		public void onClick(View v) {			
			buscarContatoDialog.dismiss();
			
			String nomeDesejado = search.getText().toString().toUpperCase();				
			int numeroLetras = nomeDesejado.length();
			CharSequence cS = nomeDesejado.subSequence(0, numeroLetras);						
	        
			int numeroContatos = contatos.size();											
			
			int j = 0;
			for(int i = 0; i < numeroContatos; i++) {
				obj = new Contato();
				obj = contatos.get(i);
				String s = obj.getNome().toUpperCase();
				Boolean contem = s.contains(cS);					
				if(contem){					
					listViewContatos.setSelection(i);
					j = 1;
					break;
				}					
			}
			
			if(j == 0) {
				Toast.makeText(ListarContatos.this, "Contact not found.", Toast.LENGTH_LONG).show();
			}
						
		}
		
	}		
						                                     
	public void onItemClick(AdapterView<?> parent, View view, int posicao, long identification) {
		
		Contato cont = (Contato) listViewContatos.getAdapter().getItem(posicao);
				
		String nome = cont.getNome();		
		String email = cont.getEmail();	
		String mobile = cont.getMobile();
		String foneCasa = cont.getFoneCasa();
		String foneTrabalho = cont.getFoneTrabalho();
		String endereco = cont.getEndereco();
		String cidade = cont.getCidade();		
		String pais = cont.getPais();
		String imagem = cont.getImagem();
		
		int indice = posicao;
		
		Intent it = new Intent (this, DetalhesContato.class);		
		it.putExtra("nome", nome);		
		it.putExtra("email", email);
		it.putExtra("mobile", mobile);
		it.putExtra("foneCasa", foneCasa);
		it.putExtra("foneTrabalho", foneTrabalho);
		it.putExtra("endereço", endereco);
		it.putExtra("cidade", cidade);		
		it.putExtra("país", pais);		
		it.putExtra("imagem", imagem);
		
		it.putExtra("indice", indice);		
		
		startActivity(it);
		finish();
		
	}
	
	protected void onDestroy() {
		//Fecha o Banco de Dados
		acoesBancoDados.fechar();
		super.onDestroy();			
	}
				    
}

Agora estou tendo problema de ResourcesNotFoundException que aponta para o método setContentView, do onCreate, o que antes não acontecia. E o layout tá lá, no R.java. Ai, ai…

Descobri qual era o problema:

Eu tenho várias pastas de layout, específicas para cada tamanho de tela, eu tinha o mesmo arquivo de layout(mesmo nome) em cada uma dessas pastas, mas aqueles elementos que estavam dando problema estavam presentes apenas em 1 desses arquivos de layout.

Então, fica a lição: se vc faz referência a um layout ou a um elemento dentro desse layout em uma Activity, essas coisas tem que estar em todas as pastas específicas, ou naquela pasta geral, chamada layout, senão vai dar NullPointerException ou ResourceNotFoundException. Acho que o mesmo se aplica aos drawables…