Autore Topic: Problemi con infrarossi...  (Letto 407 volte)

Offline smartgatto

  • Utente junior
  • **
  • Post: 97
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S5
  • Sistema operativo:
    Windows 7
Problemi con infrarossi...
« il: 17 Ottobre 2014, 19:08:20 CEST »
0
Ciao a tutti..
ho un problema con questo semplice listato per inviare una stringa infrarossi e non ne vengo a capo...faccio partire sia sull'emulatore che sul mio telefono (Galaxy S5) e mi va in errore, potete aiutarmi a capire il perchè?

grazie!!

Qua il main activity:
Codice: [Seleziona]
package com.example.ir;

import android.app.Activity;
import android.hardware.ConsumerIrManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {
        int frequenza = 0;
        int[] impulsi;
        EditText fre = (EditText)findViewById(R.id.editText1);
    EditText imp = (EditText)findViewById(R.id.editText2);
   
    Button InviaButton = (Button) findViewById(R.id.button1);
       

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
       
        InviaButton.setOnClickListener( new OnClickListener() {

                   

                                        @Override
                                        public void onClick(View v) {
                                                 frequenza = Integer.valueOf(fre.getText().toString());
                                                 impulsi[0] = Integer.valueOf(imp.getText().toString());
                                               
                                               
                                               
                                                ConsumerIrManager  mCIR = (ConsumerIrManager)getSystemService(CONSUMER_IR_SERVICE);
                                               
                                                if (mCIR.hasIrEmitter ())
                                                {
                                                        mCIR.transmit(frequenza, impulsi);
                                                       
                                                        Toast.makeText(getApplicationContext(), "Trasmesso !!!",
                                                                           Toast.LENGTH_LONG).show();
                                                }
                                                else
                                                {
                                                        Toast.makeText(getApplicationContext(), "IR non presente",
                                                                           Toast.LENGTH_LONG).show();
                                                }
                                               
                                        }
                });
       
       
       
       
       
       
       
       
       
       
       
    }
}

qui il activity_main.xml:

Codice: [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="false" >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Frequenza " />

            <EditText
                android:id="@+id/editText1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="number" >

                <requestFocus />
            </EditText>

        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            tools:ignore="UselessParent"
             >
           
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="impulsi " />

            <EditText
                android:id="@+id/editText2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="number" >

                <requestFocus />
            </EditText>
        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Invia" />

        </TableRow>

       
    </TableLayout>

</RelativeLayout>

qui il manifest:

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ir"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />
   
   <uses-permission android:name="android.permission.TRANSMIT_IR"
    android:required="false" />
    <uses-feature android:name="android.hardware.consumerir" />
   
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

e qui il log:

Codice: [Seleziona]
10-17 13:06:29.150: D/AndroidRuntime(1565): Shutting down VM
10-17 13:06:29.150: W/dalvikvm(1565): threadid=1: thread exiting with uncaught exception (group=0xb1a9aba8)
10-17 13:06:29.180: E/AndroidRuntime(1565): FATAL EXCEPTION: main
10-17 13:06:29.180: E/AndroidRuntime(1565): Process: com.example.ir, PID: 1565
10-17 13:06:29.180: E/AndroidRuntime(1565): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.ir/com.example.ir.MainActivity}: java.lang.NullPointerException
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.ActivityThread.access$800(ActivityThread.java:135)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.os.Handler.dispatchMessage(Handler.java:102)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.os.Looper.loop(Looper.java:136)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.ActivityThread.main(ActivityThread.java:5017)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at java.lang.reflect.Method.invokeNative(Native Method)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at java.lang.reflect.Method.invoke(Method.java:515)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at dalvik.system.NativeStart.main(Native Method)
10-17 13:06:29.180: E/AndroidRuntime(1565): Caused by: java.lang.NullPointerException
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.Activity.findViewById(Activity.java:1884)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at com.example.ir.MainActivity.<init>(MainActivity.java:16)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at java.lang.Class.newInstanceImpl(Native Method)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at java.lang.Class.newInstance(Class.java:1208)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
10-17 13:06:29.180: E/AndroidRuntime(1565):         ... 11 more

Grazie mille!!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con infrarossi...
« Risposta #1 il: 17 Ottobre 2014, 19:26:09 CEST »
0
Citazione
10-17 13:06:29.180: E/AndroidRuntime(1565): Caused by: java.lang.NullPointerException
10-17 13:06:29.180: E/AndroidRuntime(1565):         at android.app.Activity.findViewById(Activity.java:1884)
10-17 13:06:29.180: E/AndroidRuntime(1565):         at com.example.ir.MainActivity.<init>(MainActivity.java:16)

Guarda la riga 16 di MainActivity.java .

Gli infrarossi sono innocenti.

Non puoi richiamare la funzione findViewById nella definizione della classe ... devi farlo quanto meno nella OnCreate, dopo il setcontentview.

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline smartgatto

  • Utente junior
  • **
  • Post: 97
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S5
  • Sistema operativo:
    Windows 7
Re:Problemi con infrarossi...
« Risposta #2 il: 17 Ottobre 2014, 20:43:31 CEST »
0
Ok... l'ho modificato così come mi hai suggerito:

Codice: [Seleziona]
package com.example.ir;

import android.app.Activity;
import android.hardware.ConsumerIrManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {
        int frequenza = 0;
        int[] impulsi;
       
   
   

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        final EditText fre = (EditText)findViewById(R.id.editText1);
        final EditText imp = (EditText)findViewById(R.id.editText2);
        Button InviaButton = (Button) findViewById(R.id.button1);
               
        InviaButton.setOnClickListener( new OnClickListener() {

                   

                                        @Override
                                        public void onClick(View v) {
                                                 frequenza = Integer.valueOf(fre.getText().toString());
                                                 impulsi[0] = Integer.valueOf(imp.getText().toString());
                                               
                                               
                                               
                                                ConsumerIrManager  mCIR = (ConsumerIrManager)getSystemService(CONSUMER_IR_SERVICE);
                                               
                                                if (mCIR.hasIrEmitter ())
                                                {
                                                        mCIR.transmit(frequenza, impulsi);
                                                       
                                                        Toast.makeText(getApplicationContext(), "Trasmesso !!!",
                                                                           Toast.LENGTH_LONG).show();
                                                }
                                                else
                                                {
                                                        Toast.makeText(getApplicationContext(), "IR non presente",
                                                                           Toast.LENGTH_LONG).show();
                                                }
                                               
                                        }
                });
       
       
       
       
       
       
       
       
       
       
       
    }
}


ma...
ora l'applicazione dopo che ho inserito i dati e schiacciato il tasto invia mi va in crash con questo LOG
e non capisco il perchè (a parte la mia colpa da niubbio)

Codice: [Seleziona]
10-17 14:47:52.000: E/AndroidRuntime(1747): FATAL EXCEPTION: main
10-17 14:47:52.000: E/AndroidRuntime(1747): Process: com.example.ir, PID: 1747
10-17 14:47:52.000: E/AndroidRuntime(1747): java.lang.NullPointerException
10-17 14:47:52.000: E/AndroidRuntime(1747):         at com.example.ir.MainActivity$1.onClick(MainActivity.java:36)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at android.view.View.performClick(View.java:4438)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at android.view.View$PerformClick.run(View.java:18422)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at android.os.Handler.handleCallback(Handler.java:733)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at android.os.Handler.dispatchMessage(Handler.java:95)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at android.os.Looper.loop(Looper.java:136)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at android.app.ActivityThread.main(ActivityThread.java:5017)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at java.lang.reflect.Method.invokeNative(Native Method)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at java.lang.reflect.Method.invoke(Method.java:515)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-17 14:47:52.000: E/AndroidRuntime(1747):         at dalvik.system.NativeStart.main(Native Method)
« Ultima modifica: 17 Ottobre 2014, 20:51:43 CEST da smartgatto »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con infrarossi...
« Risposta #3 il: 18 Ottobre 2014, 10:54:42 CEST »
0
La dichiarazione delle variabili che contengono gli widget (fre, imp, InviaButton) devono stare fuori dalla OnCreate, altrimenti finita l'esecuzione della funzione, vengono distrutte.

Leggiti questo tutorial di base Java sullo scope delle variabili:
Variable Scope
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline smartgatto

  • Utente junior
  • **
  • Post: 97
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S5
  • Sistema operativo:
    Windows 7
Re:Problemi con infrarossi...
« Risposta #4 il: 18 Ottobre 2014, 17:15:10 CEST »
0
Ma scusa.. (intanto grazie per le risposte)
prima era fuori dalla oncreate e mi dava errore... quindi mi hai detto che non doveva essere public e quindi l'ho messa nell'unico punto che credevo possibile...mi sfugge qualcosa?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con infrarossi...
« Risposta #5 il: 18 Ottobre 2014, 19:00:08 CEST »
0
mi sfugge qualcosa?

si, il concetto di "scope" di una variabile  ;-)

Una variabile "vive" per tutto il tempo che vive l'oggetto in cui è stata dichiarata. Se la dichiari nella classe, fuori da qualsiasi funzione, esiste per tutto il tempo che esiste la classe. Se la dichiari dentro una funzione, esiste per tutto il tempo che esiste la funzione, cioè solo per il tempo che viene eseguita. Si parla quindi di "scope" di una variabile, traducibile con "ambito" in cui essa esiste.

Prima avevi dichiarato le variabili nel posto giusto, ma non puoi usarci la findviewbyid. Poi hai usato la findviewbyid nel posto giusto (dopo la creazione delle view), ma dichiarando le variabili in quel punto, alla fine della funzione sono state distrutte per sempre.

Dichiara le variabili fuori dalla oncreate, valorizzale dentro la oncreate.

E comunque leggiti l'articolo che ti ho linkato, non è un "di più", sono concetti fondamentali per la programmazione, in qualsiasi linguaggio.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store