Aller au contenu

Problème programmation eclipse


Goldenscorpio

Recommended Posts

Bonsoir à tous,

 

En ce moment, je programme une application pour terminal android et le principe de cette appli. serait de juste de lire un tag NFC. Mais voila le problème, étant donné que je suis ultra-novice dans ce langage de programmation, je n'ai aucune idée de comment m'y prendre pour simplement lancer la lecture sur mon téléphone. Donc je me rabat sur ce forum pour peut être me renseigner et m'aider. Je ne joint pas de morceau de mon code car pour le moment je suis sur la case départ.

 

Je vous remercie d'avance et vous souhaite une bonne soirée

 

 

Lien vers le commentaire
Partager sur d’autres sites

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous, je pense avoir fait quelque chose de pas mal concernant mon application pour la lecture des tags NFC, mais le problème c'est que quand je lance mon application sur mon téléphone, elle s’arrête (Elle ne crash pas, elle s’arrête juste). Donc je requiert votre aide pour m'éclairer :) . Voici mon code : 

 

package com.example.apptestalex;
 
//import java.text.BreakIterator;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.PatternMatcher;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
//import java.awt.*;
import android.view.MotionEvent;
import android.view.View;
 
 
//public class MainActivity extends Activity {
public class MainActivity extends Activity implements View.OnTouchListener, View.OnClickListener {
 
Button b1 = null;
Button b2 = null;
Button b3 = null;
TextView tv = null;
TextView tv2 = null;
TextView tv3 = null;
TextView tv4 = null;
TextView tv5 = null;
EditText et1 = null;
String txt = null;
NdefMessage[] messages = null;
NfcAdapter mAdapter = null;
Intent intent = null;
int i;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    this.tv5 = (TextView) findViewById(R.id.tv5);
    this.mAdapter = NfcAdapter.getDefaultAdapter(this);
 
    if (mAdapter == null || !mAdapter.isEnabled()) {
    Toast.makeText(this, "Erreur NFC non activé", Toast.LENGTH_SHORT).show();
    finish();
    return;
    }
        
        tv = (TextView)findViewById(R.id.textView2);
        tv2 = (TextView)findViewById(R.id.textView3);
        //b1 = (Button) findViewById(R.id.b1);
        //b2 = (Button) findViewById(R.id.b2);
        b3 = (Button) findViewById (R.id.b3);
        //tv3 = (TextView) findViewById (R.id.tv3);
        tv4 = (TextView) findViewById (R.id.tv4);
        tv5 = (TextView) findViewById (R.id.tv5);
        et1 = (EditText) findViewById (R.id.et1);        
        /*
        
        b1.setOnTouchListener(this);
        b1.setOnClickListener(this);
        
        b2.setOnTouchListener(this);
        b2.setOnClickListener(this);
        
        */
        
        super.onCreate(savedInstanceState);
        
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    protected void onResume() {
    super.onResume();
    Intent intent = new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
    IntentFilter ndefFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    ndefFilter.addDataScheme("vnd.android.nfc");
    ndefFilter.addDataAuthority("ext", null);
    //ndefFilter.addDataPath("/zenika.com:zenwifi", PatternMatcher.PATTERN_LITERAL);
    IntentFilter[] filters = {ndefFilter};
    String[][] techs = {{Ndef.class.getName()}};
    mAdapter.enableForegroundDispatch(this, pIntent, filters, techs);
    //IntentFilter[] ndefFilter = null;
    String[][] techListArray = null;
    mAdapter.enableForegroundDispatch(this, pIntent, filters, techListArray);
    }
 
    @Override
    protected void onPause() {
    super.onPause();
    mAdapter.disableForegroundDispatch(this);
    }
    
    private void resolveIntent(Intent intent)
    {
    String action = intent.getAction();
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
    Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    if (rawMsgs != null) {
    NdefMessage[] messages = new NdefMessage[rawMsgs.length];
    for (int i = 0; i < rawMsgs.length; i++) {
    messages = (NdefMessage) rawMsgs;
    }
    // Exemple basique de récupération des données dans le tableau
    String str = new String(messages[0].getRecords()[0].getPayload());
    tv5.setText(str);
    }
    }
   
   
    }
 
 
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
 
}
 
public void click1(View parView)
{
//tv.append("\nSalut1");
tv3.setText("Click");
}
 
public void click2 (View parView)
{
tv2.append("\nSalut2");
}
public void click3 (View parView)
{
//txt=et1.getText().toString();
tv4.setText(et1.getText().toString());
 
}
 
 
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
int id = arg0.getId();
        switch(id){
                  }
return false;
}
 
    
}
 
 
En vous souhaitant une bonne journée  ^_^
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Tu as deux appels à super.onCreate dans ta méthode onCreate. Un seul est nécessaire, tu peux enlever le dernier. C'est peut être la cause du comportement de ton appli

 

PS: merci d'utiliser les balises [ code ] pour le formatage de ton code, ça aiderait à la lisibilité de ton post

Lien vers le commentaire
Partager sur d’autres sites

D'accord merci, je vais essayer tout de suite et je vous tiens au courant ! 

Me revoila, alors j'ai essayé d'enlever le super.onCreate mais cela ne change pas (peut-être parce que après avoir écrit mon ancien post, j'ai changer des parties de mon code). Mon appli s’arrête car elle exécute tout le programme. J'ai mis un while mais rien n'y fait, je ne comprend pas. Mon souci maintenant est que j'aimerai que lorsque le programme détecte quelque chose, elle l'affiche dans un TextView, comment faire ?  :huh:

 

 

package com.example.apptestalex;
 
//import java.text.BreakIterator;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.PatternMatcher;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
//import java.awt.*;
import android.view.MotionEvent;
import android.view.View;
 
 
//public class MainActivity extends Activity {
public class MainActivity extends Activity implements View.OnTouchListener, View.OnClickListener {
 
boolean clickb3 = false;
Button b1 = null;
Button b2 = null;
Button b3 = null;
TextView tv = null;
TextView tv2 = null;
TextView tv3 = null;
TextView tv4 = null;
TextView tv5 = null;
TextView tv6 = null;
EditText et1 = null;
String txt = null;
NdefMessage[] messages = null;
NfcAdapter mAdapter = null;
Intent intent = null;
int i;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    this.tv5 = (TextView) findViewById(R.id.tv5);
    this.mAdapter = NfcAdapter.getDefaultAdapter(this);
 
    if (mAdapter == null || !mAdapter.isEnabled()) {
    Toast.makeText(this, "Erreur NFC non activé", Toast.LENGTH_SHORT).show();
    finish();
    resolveIntent(intent);
    return;
    }
        
        tv = (TextView)findViewById(R.id.textView2);
        tv2 = (TextView)findViewById(R.id.textView3);
        //b1 = (Button) findViewById(R.id.b1);
        //b2 = (Button) findViewById(R.id.b2);
        b3 = (Button) findViewById (R.id.b3);
        //tv3 = (TextView) findViewById (R.id.tv3);
        tv4 = (TextView) findViewById (R.id.tv4);
        tv5 = (TextView) findViewById (R.id.tv5);
        et1 = (EditText) findViewById (R.id.et1);        
        tv6 = (TextView) findViewById (R.id.tv6);
        //super.onCreate(savedInstanceState);
        
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    //@Override
    /*protected void onResume() {
    super.onResume();
    Intent intent = new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
    IntentFilter ndefFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    ndefFilter.addDataScheme("vnd.android.nfc");
    ndefFilter.addDataAuthority("ext", null);
    //ndefFilter.addDataPath("/zenika.com:zenwifi", PatternMatcher.PATTERN_LITERAL);
    IntentFilter[] filters = {ndefFilter};
    String[][] techs = {{Ndef.class.getName()}};
    mAdapter.enableForegroundDispatch(this, pIntent, filters, techs);
    String[][] techListArray = null;
    mAdapter.enableForegroundDispatch(this, pIntent, filters, techListArray);
    }*/
 
    @Override
    protected void onPause() {
    super.onPause();
    mAdapter.disableForegroundDispatch(this);
    }
    
    private void resolveIntent(Intent intent)
    {
        if (clickb3 = true)
        {
    String action = intent.getAction();
    while (action == "")
    {
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
    Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    if (rawMsgs != null) {
    tv6.setTag(rawMsgs);
    NdefMessage[] messages = new NdefMessage[rawMsgs.length];
    for (int i = 0; i < rawMsgs.length; i++) {
    messages = (NdefMessage) rawMsgs;
    }
    // Exemple basique de récupération des données dans le tableau
    String str = new String(messages[0].getRecords()[0].getPayload());
    tv6.setText(str);
    }
    }
    }
        }
   
   
    }
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
 
}
 
public void click1(View parView)
{
//tv.append("\nSalut1");
tv3.setText("Click");
}
 
public void click2 (View parView)
{
tv2.append("\nSalut2");
}
public void click3 (View parView)
{
clickb3 = true ;
tv4.setText("Lecture activée");
//txt=et1.getText().toString();
//tv4.setText(et1.getText().toString());
 
}
 
 
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
int id = arg0.getId();
        switch(id){
                  }
return false;
}
 
    
}

Par contre, comment utilise-on les balises

 ?  :huh:  :)
Modifié par Goldenscorpio
Lien vers le commentaire
Partager sur d’autres sites

Essaye de rajouter des logs, ou d'exécuter au debugger ton appli, pour voir où tu passes.

 

PS: pour les balises code, il suffit, soit de les saisir, soit d'utiliser l'icone dans l'éditeur de texte

Lien vers le commentaire
Partager sur d’autres sites

Ok, merci je vais voir ! 


Un dernier détail, j'ai mis un bouton, et que la lecture NFC ne se lance uniquement si j'appuie sur ce bouton mais cela ne fonctionne pas, comment cela ce fait-il ? 

package com.example.apptestalex;

//import java.text.BreakIterator;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.PatternMatcher;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
import android.view.MotionEvent;
import android.view.View;


//public class MainActivity extends Activity {
public class MainActivity extends Activity implements View.OnTouchListener, View.OnClickListener {
	
	boolean clickb3 = false;
	Button b1 = null;
	Button b2 = null;
	Button b3 = null;
	TextView tv = null;
	TextView tv2 = null;
	TextView tv3 = null;
	TextView tv4 = null;
	TextView tv5 = null;
	TextView tv6 = null;
	EditText et1 = null;
	String txt = null;
	NdefMessage[] messages = null;
	NfcAdapter mAdapter = null;
	Intent intent = null;
	int i;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    	this.tv5 = (TextView) findViewById(R.id.tv5);
    	this.mAdapter = NfcAdapter.getDefaultAdapter(this);

    	if (mAdapter == null || !mAdapter.isEnabled()) {
    		Toast.makeText(this, "Erreur NFC non activé", Toast.LENGTH_SHORT).show();
    		finish();
    		resolveIntent(intent);
    		//return;
    	}
        
        tv = (TextView)findViewById(R.id.textView2);
        tv2 = (TextView)findViewById(R.id.textView3);
        //b1 = (Button) findViewById(R.id.b1);
        //b2 = (Button) findViewById(R.id.b2);
        b3 = (Button) findViewById (R.id.b3);
        //tv3 = (TextView) findViewById (R.id.tv3);
        tv4 = (TextView) findViewById (R.id.tv4);
        tv5 = (TextView) findViewById (R.id.tv5);
        et1 = (EditText) findViewById (R.id.et1);        
        tv6 = (TextView) findViewById (R.id.tv6);
        //super.onCreate(savedInstanceState);
        
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    /*@Override
    protected void onResume() {
    	super.onResume();
    	Intent intent = new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    	PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
    	IntentFilter ndefFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    	ndefFilter.addDataScheme("vnd.android.nfc");
    	ndefFilter.addDataAuthority("ext", null);
    	//ndefFilter.addDataPath("/zenika.com:zenwifi", PatternMatcher.PATTERN_LITERAL);
    	IntentFilter[] filters = {ndefFilter};
    	String[][] techs = {{Ndef.class.getName()}};
    	mAdapter.enableForegroundDispatch(this, pIntent, filters, techs);
    	String[][] techListArray = null;
    	mAdapter.enableForegroundDispatch(this, pIntent, filters, techListArray);*/

    @Override
    protected void onPause() {
    	super.onPause();
    	mAdapter.disableForegroundDispatch(this);
    }
    
    private void resolveIntent(Intent intent)
    {
        if (clickb3 = true)
        {
    	String action = intent.getAction();
    	while (action == "")
    	{
    	if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
    		Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    		Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    		if (rawMsgs != null) {
    			tv6.setTag(rawMsgs);
    			NdefMessage[] messages = new NdefMessage[rawMsgs.length];
    			for (int i = 0; i < rawMsgs.length; i++) {
    				messages[i] = (NdefMessage) rawMsgs[i];
    			}
    		}
    	}
    	}
        }
    	
    }
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		
		}
	
	public void click1(View parView)
	{
		//tv.append("\nSalut1");
		tv3.setText("Click");
	}
	
	public void click2 (View parView)
	{
		tv2.append("\nSalut2");
	}
	public void click3 (View parView)
	{
		clickb3 = true ;
		tv4.setText("Lecture activée");
		//txt=et1.getText().toString();
		//tv4.setText(et1.getText().toString());
		
	}
	

	@Override
	public boolean onTouch(View arg0, MotionEvent arg1) {
		int id = arg0.getId();
        switch(id){
                  }
		return false;
	}

    
}

PS : Voila les balises  :P  B)

Lien vers le commentaire
Partager sur d’autres sites

Et comment régler le problème de " 'MonApplication' c'est malheureusement arrêtée" ? 

 

C'est bon, j'ai trouvé, il fallait juste que je rajoute une permission  :lol:


Une dernière question : Comment faire pour que lorsque je lis un tag un message s'affiche dans un EditText et que donc il soit modifiable ? 

Modifié par Goldenscorpio
Lien vers le commentaire
Partager sur d’autres sites

Oui d'accord, mais par éxemple, dans mon code si je veux que quand mon tag est lu, cela s'affiche dans un TextView avec l'id "tv6", je procède comment ?

package com.example.apptestalex;

//import java.text.BreakIterator;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.PatternMatcher;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
import android.view.MotionEvent;
import android.view.View;

//public class MainActivity extends Activity {
public class MainActivity extends Activity {

	boolean clickb3 = false;
	Button b1 = null;
	Button b2 = null;
	Button b3 = null;
	TextView tv = null;
	TextView tv2 = null;
	TextView tv3 = null;
	TextView tv4 = null;
	TextView tv5 = null;
	TextView tv6 = null;
	EditText et1 = null;
	String txt = null;
	NdefMessage[] messages = null;
	NfcAdapter mAdapter = null;
	Intent intent = null;
	int i;
	NdefRecord record;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		this.tv5 = (TextView) findViewById(R.id.tv5);
		this.mAdapter = NfcAdapter.getDefaultAdapter(this);

		if (mAdapter == null || !mAdapter.isEnabled()) {
			Toast.makeText(this, "Erreur NFC non activé", Toast.LENGTH_SHORT).show();
			finish();
			resolveIntent(intent);
			return;
		}

		tv = (TextView) findViewById(R.id.textView2);
		tv2 = (TextView) findViewById(R.id.textView3);
		// b1 = (Button) findViewById(R.id.b1);
		// b2 = (Button) findViewById(R.id.b2);
		b3 = (Button) findViewById(R.id.b3);
		// tv3 = (TextView) findViewById (R.id.tv3);
		tv4 = (TextView) findViewById(R.id.tv4);
		tv5 = (TextView) findViewById(R.id.tv5);
		et1 = (EditText) findViewById(R.id.et1);
		tv6 = (TextView) findViewById(R.id.tv6);
		// super.onCreate(savedInstanceState);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	
	@Override
	protected void onResume() {
		super.onResume();
		Intent intent = new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
		PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
		IntentFilter[] filters = null;
		String[][] techListArray = null;
		mAdapter.enableForegroundDispatch(this, pIntent, filters, techListArray);
	}


	@Override
	protected void onPause() {
		super.onPause();
		mAdapter.disableForegroundDispatch(this);
	}

	private void resolveIntent(Intent intent) 
	{
		if (clickb3 == true) 
		{
			String action = intent.getAction();
			while (action == "") 
			{
				if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) 
				{
					Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
					byte[] Tag = record.getPayload();
					if(Tag != null) 
					{
						NdefMessage message = (NdefMessage) rawMsgs[0];
						NdefRecord[] records = message.getRecords();
						if(records.length > 0) 
						{
							record = records[0];
						}
					}
				}
			}
		}
	}


	public void click1(View parView) {
		// tv.append("\nSalut1");
		tv3.setText("Click");
	}

	public void click2(View parView) {
		tv2.append("\nSalut2");
	}

	public void click3(View parView) {
		clickb3 = true;
		tv4.setText("Lecture activée");
		// txt=et1.getText().toString();
		// tv4.setText(et1.getText().toString());

	}
}

Lien vers le commentaire
Partager sur d’autres sites

Qu'est-ce que tu ne comprends pas ? Il te suffit de faire un

tv6.setText( chaine_a_afficher );
avec le contenu que tu souhaites afficher lorsque tu as lu ton tag...

 

PS: si le test d'égalité est bien ==, il n'est valable que pour les types primitifs, et ne fonctionnera pas comme attendu pour une chaine. Dans ta méthode resolveIntent, le ' while (action == "") ' retournera toujours false, il faut écrire ' while (action.equals("")) ' à la place...

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...