Erro ao chamar uma Activity a partir de um botão

16 respostas
T

Preciso chamar uma Activity qnd clico em um botão, essa acivity contém um listView q é alimentado a partir de um cursor. Segue o código:

chamando a activity no clique do botão:

btnListar.setOnClickListener(new View.OnClickListener() {
    	    		
		public void onClick(View v) {
			
			//setContentView(R.layout.consulta_linha_tabela);
			Intent i = new Intent(v.getContext(), Registros.class); 
			startActivity(i);
				
		}
	});
         
    }

Activity q será chamada:

public class Registros extends Activity {
	
	private DbAdapter db;
	
	Cursor cursor;
	
	String [] itens = null;
	
	SimpleCursorAdapter adapterLista;
	
	ListView lista;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.consulta_linha_tabela);
		
		listar();
	}

	private void listar() {
		db.open();
		lista = (ListView) findViewById(R.id.list);
		
		String nome = "";
		String codigo = "";
		
		List<String> lista1 = new ArrayList<String>();
		
		while (cursor.moveToNext()){
		nome = cursor.getString(cursor.getColumnIndex(DbAdapter.COLUNA_NOME));
		codigo = cursor.getString(cursor.getColumnIndex(DbAdapter.COLUNA_CODIGO));
		lista1.add(nome+"\n"+codigo);
		}
		
		itens = (String []) lista1.toArray(new String [0]);
		
		ArrayAdapter<String> ad = new ArrayAdapter<String>(this, R.layout.consulta_linha_tabela, itens);
		
		lista.setAdapter(ad);
		db.close();
		
	}

xml da nova activity:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="wrap_content">
	
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
    </ListView>

	    <TextView
        android:id="@+id/linha1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
        <TextView
        android:id="@+id/linha2"
        android:padding="5sp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
      
</LinearLayout>

android manifest:

<activity
            android:name=".Registros"
            android:label="List View" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                
            </intent-filter>
        </activity>

e dá esse erro aqui:

Alguém sabe como resolver esse problema??

16 Respostas

E

Tenta Cololocar ao invés de

Intent i = new Intent(v.getContext(), Registros.class);

tenta colocar o activity atual exemplo:

Intent i = new Intent(ActivityAtual.this, Registros.class);
      //ou
      Intent i = new Intent(ActivityMain.this, Registros.class);
     //Trocando ActivityMain.this pelo Activity Atual.

Na pratica o isso tambem serve para fazer comunicação entre activitys

Caso não funcione tem alguns exemplos em:
http://yuriadamsmaia.wordpress.com/2011/03/27/desenvolver-para-android-chamando-activitys/

T

Bom eduardovs, muito obrigado pela ajuda, mas não funcionou…
continua dando o mesmo erro, eu já não sei mais o que fazer!

L

thamiris.ramos:
Bom eduardovs, muito obrigado pela ajuda, mas não funcionou…
continua dando o mesmo erro, eu já não sei mais o que fazer!

Oi,

Com certeza está faltando algo em seu AndroidManifest.xml

Poderia posta-lo por completo?

Tchauzin!

A

Faz assim:
db = new DbAdapter(…);
antes do db.open(),

T

Eu fiz e continua dando NullPointerException…

T

Segue o AndroindManifest.xml completo…

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.android.consulta"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:icon="@drawable/ic_app"
        android:label="@string/app_name" >
        <activity
            android:name=".BuscadorSedex1Activity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        
        <activity
            android:name=".Pesquisa"
            android:label="pesquisa" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:scheme="http" />
            </intent-filter>
            
        </activity>
        <activity android:name=".Registros" android:label="Registros">
        		 <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
            
        </activity>
    </application>

</manifest>
A

Posta o logCat completo, por favor

S

Bem, as activities que eu declaro no manifest só tem o nome:

Achei meio estranho também ter um ponto no nome da activity no manifest, tira ele e veja o que acontece. Deixe ele o mais simples e tente executar.

L

Oi,

Tenta assim:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.android.consulta"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />
    
    <application
        android:icon="@drawable/ic_app"
        android:label="@string/app_name" >
        <activity
            android:name="br.android.consulta.BuscadorSedex1Activity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="br.android.consulta.Pesquisa"
            android:label="pesquisa" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
            </intent-filter>            
        </activity>
        <activity android:name="br.android.consulta.Registros"
		 android:label="Registros">
        	 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />           
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

Tchauzin!

K

thamiris.ramos:

Faz assim:
db = new DbAdapter(…);
antes do db.open(),

Eu fiz e continua dando NullPointerException…

Seu NullPointer só poder ser a variavel db até onde posso ver.

Poste o erro completo e atualizado.

PS: Use ListActivity posteriormente…

K

soaresinfo:

Achei meio estranho também ter um ponto no nome da activity no manifest, tira ele e veja o que acontece. Deixe ele o mais simples e tente executar…

O Ponto (.) é devido conter o package no manifest.

K

Desculpe por tantos posts, alias não acredito que seja o Manisfest, me parece que a outra variavel não inicializada

A “cursor”

while (cursor.moveToNext()){
C

Oi, na minha aplicação eu fiz dessa forma…

public void chamatela(){ startActivity(new Intent(NOME DA ACTIVITY QUE VC ESTA.this, Registros.class)); }

e depois vc pode chamar o proocedimento pelo botão

btnListar.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { chamatela(); } });

Espero ter ajudado. ,/

V

Pelo que eu entedi a classe registro não é a principal, certo ? Mas no android manifest, ela esta definida como uma:

<activity  
    android:name=".Registros"  
    android:label="List View" >  
    <intent-filter>  
        <action android:name="android.intent.action.VIEW" />  
  
        <category android:name="android.intent.category.DEFAULT" />  
  
          
    </intent-filter>  
</activity>

Isso é errado, o correto seria:

<activity android:name=".Registros"  android:label="List View" />
C

thamiris.ramos:
Preciso chamar uma Activity qnd clico em um botão, essa acivity contém um listView q é alimentado a partir de um cursor. Segue o código:

chamando a activity no clique do botão:

btnListar.setOnClickListener(new View.OnClickListener() {
    	    		
		public void onClick(View v) {
			
			//setContentView(R.layout.consulta_linha_tabela);
			Intent i = new Intent(v.getContext(), Registros.class); 
			startActivity(i);
				
		}
	});
         
    }

Activity q será chamada:

public class Registros extends Activity {
	
	private DbAdapter db;
	
	Cursor cursor;
	
	String [] itens = null;
	
	SimpleCursorAdapter adapterLista;
	
	ListView lista;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.consulta_linha_tabela);
		
		listar();
	}

	private void listar() {
		db.open();
		lista = (ListView) findViewById(R.id.list);
		
		String nome = "";
		String codigo = "";
		
		List<String> lista1 = new ArrayList<String>();
		
		while (cursor.moveToNext()){
		nome = cursor.getString(cursor.getColumnIndex(DbAdapter.COLUNA_NOME));
		codigo = cursor.getString(cursor.getColumnIndex(DbAdapter.COLUNA_CODIGO));
		lista1.add(nome+"\n"+codigo);
		}
		
		itens = (String []) lista1.toArray(new String [0]);
		
		ArrayAdapter<String> ad = new ArrayAdapter<String>(this, R.layout.consulta_linha_tabela, itens);
		
		lista.setAdapter(ad);
		db.close();
		
	}

xml da nova activity:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="wrap_content">
	
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
    </ListView>

	    <TextView
        android:id="@+id/linha1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
        <TextView
        android:id="@+id/linha2"
        android:padding="5sp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
      
</LinearLayout>

android manifest:

<activity
            android:name=".Registros"
            android:label="List View" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                
            </intent-filter>
        </activity>

e dá esse erro aqui:

Alguém sabe como resolver esse problema??

Você ja olhou se o ação esta sendo declarada

Button botao = (Button) findViewById(R.id.NOME_DO_SEU_BOTÃO);
botao.setOnClickListener(this);
S

tenta marcar um breakpoint lá no metodo listar() na primeira linha db.open, e vai debugando pra ver em qual linha que ele pára e dá o erro…

Criado 3 de maio de 2012
Ultima resposta 17 de jun. de 2013
Respostas 16
Participantes 10