Autore Topic: Problemi con il codice.  (Letto 1136 volte)

Offline Cloud

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7
Problemi con il codice.
« il: 23 Dicembre 2013, 12:12:20 CET »
0
Salve, ho iniziato a sviluppare un piccolo pezzo di codice ma l'app mi crasha, da quando ho inserito il codice per il wifi. Sapreste aiutarmi/consigliarmi? Il codice è il seguente:

Codice (Java): [Seleziona]
package com.toggle;
 
import android.os.Bundle;
import android.media.AudioManager;
import android.net.wifi.WifiManager;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends Activity {
       
       
 
       
        private AudioManager mAudioManager;
        private WifiManager Wifi;
        private boolean mPhoneIsSilent;
        private boolean WifiOn;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
       
        mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
       
        checkIfPhoneIsSilent();
        checkIfWifiIsOn();    
        setButtonClickListener();
       
        }
       
        private void setButtonClickListener(){
                Button b5 = (Button)findViewById(R.id.b5);
                b5.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                               
                                if(mPhoneIsSilent){
                                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                                        mPhoneIsSilent = true;
                                } else {
                                        mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                                        mPhoneIsSilent = false;
                                }
                               
                        }
                });
       
                Button b4 = (Button)findViewById(R.id.b4);{
                b4.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View c) {
                                        // TODO Auto-generated method stub
                               
                                Wifi=(WifiManager)getSystemService(WifiManager.WIFI_STATE_CHANGED_ACTION);
                               
                                if(WifiOn = true){
                                        Wifi.setWifiEnabled(false);
                                       
                                } else {
                                        Wifi.setWifiEnabled(true);
                                       
                                }
                        }
                });
               
                }
        }
       
        private void checkIfWifiIsOn(){
                int wifiMode = Wifi.getWifiState();
                if (wifiMode == WifiManager.WIFI_STATE_ENABLED){
                        WifiOn = true;
                } else {
                        WifiOn = false;
                }
        }
       
        private void checkIfPhoneIsSilent (){
                int ringerMode = mAudioManager.getRingerMode();
                if (ringerMode == AudioManager.RINGER_MODE_NORMAL){
                        mPhoneIsSilent = false;
                } else {
                        mPhoneIsSilent = true;
                }
        }
       
        @Override
        protected void onResume() {
                super.onResume();
                checkIfPhoneIsSilent();
                checkIfWifiIsOn();
        }
 
        @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;
        }
 
}

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 il codice.
« Risposta #1 il: 23 Dicembre 2013, 12:36:47 CET »
0
Dovresti postare il LogCat dell'errore: c'è scritto il tipo di errore, il file in cui si è generato e la riga di codice.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Cloud

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7
Re:Problemi con il codice.
« Risposta #2 il: 23 Dicembre 2013, 13:03:08 CET »
0
L'ho incollato qui: ?:??: W/?(?): --------- beginning of /dev/log/main  12-23 06:51:48.670: E/logwra - Pastebin.com
Non sapendo cosa prendere ho preso tutto dal lancio dell'app XD.

P.S.: mi scuso per aver sbagliato sezione del topic :(
« Ultima modifica: 23 Dicembre 2013, 13:09:39 CET da Cloud »

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 il codice.
« Risposta #3 il: 23 Dicembre 2013, 14:11:03 CET »
0
Quello che devi fare è individuare (nel LogCat) le righe relative agli errori. Sono quelle con la E, e tipicamente un crash di un'app si manifesta con una decina (o più) di righe di errore consecutive nel quale viene riportato tutto lo stacktrace delle chiamate che hanno portato all'errore.

Citazione
12-23 06:58:08.215: E/AndroidRuntime(1167): FATAL EXCEPTION: main
12-23 06:58:08.215: E/AndroidRuntime(1167): Process: com.toggle, PID: 1167
12-23 06:58:08.215: E/AndroidRuntime(1167): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.toggle/com.toggle.MainActivity}: java.lang.NullPointerException
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.os.Handler.dispatchMessage(Handler.java:102)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.os.Looper.loop(Looper.java:136)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.ActivityThread.main(ActivityThread.java:5017)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at java.lang.reflect.Method.invokeNative(Native Method)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at java.lang.reflect.Method.invoke(Method.java:515)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at dalvik.system.NativeStart.main(Native Method)
12-23 06:58:08.215: E/AndroidRuntime(1167): Caused by: java.lang.NullPointerException
12-23 06:58:08.215: E/AndroidRuntime(1167):     at com.toggle.MainActivity.checkIfWifiIsOn(MainActivity.java:71)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at com.toggle.MainActivity.onCreate(MainActivity.java:29)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.Activity.performCreate(Activity.java:5231)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-23 06:58:08.215: E/AndroidRuntime(1167):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
12-23 06:58:08.215: E/AndroidRuntime(1167):     ... 11 more
12-23 06:58:08.225: W/ActivityManager(384):   Force finishing activity com.toggle/.MainActivity

In tali righe ci trovi la natura dell'errore (nel tuo caso NullPointerException). Poi devi cercare almeno una riga in cui si fa riferimento ad uno dei tuoi file sorgenti (nel tuo caso MainActivity.java) e ci trovi anche a quale riga del file sorgente si è generato l'errore (nel tuo caso alla riga 71).

Quel tipo di errore vuol dire che alla riga 71 di MainActivity.java c'è qualcosa che è NULL e non dovrebbe esserlo. Per scoprire qual'è l'oggetto NULL, prima di tale riga potresti mettere un Log.d("TAG","oggetto XXX = "+XXX) per far uscire direttamente nel LogCat, subito prima dell'errore, lo stato dei vari oggetti incriminati.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Cloud

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7
Re:Problemi con il codice.
« Risposta #4 il: 23 Dicembre 2013, 14:43:52 CET »
0
La risposta è stata molto chiara, solo che essendo alle prime armi non saprei proprio come fare un Log. Potresti farmi un esempio concreto (nel senso di aiutarmi con il codice). La riga 71 dovrebbe essere:
Codice (Java): [Seleziona]
private void checkIfWifiIsOn(){
                int wifiMode = Wifi.getWifiState();  -> 71
                if (wifiMode == WifiManager.WIFI_STATE_ENABLED){
                        WifiOn = true;
                } else {
                        WifiOn = false;
                }
        }

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 il codice.
« Risposta #5 il: 23 Dicembre 2013, 14:49:30 CET »
0
La risposta è stata molto chiara, solo che essendo alle prime armi non saprei proprio come fare un Log. Potresti farmi un esempio concreto (nel senso di aiutarmi con il codice). La riga 71 dovrebbe essere:
Codice (Java): [Seleziona]
private void checkIfWifiIsOn(){
                int wifiMode = Wifi.getWifiState();  -> 71
                if (wifiMode == WifiManager.WIFI_STATE_ENABLED){
                        WifiOn = true;
                } else {
                        WifiOn = false;
                }
        }

In quella riga solo Wifi può essere NULL, per cui vuol dire che prima non è stato mai inizializzato.

Per verificarlo, aggiungi prima una riga tipo questa e guarda nel LogCat cosa esce:
Codice (Java): [Seleziona]
Log.d("TUOTAG","oggetto Wifi = "+Wifi);
Per correggerlo, fai precedere una riga tipo questa:
Codice (Java): [Seleziona]
Wifi=(WifiManager)getSystemService(WifiManager.WIFI_STATE_CHANGED_ACTION);
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Cloud

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7
Re:Problemi con il codice.
« Risposta #6 il: 23 Dicembre 2013, 15:13:14 CET »
0
Infatti:
Codice (Java): [Seleziona]
12-23 09:10:30.490: D/TAG(1025): oggetto Wifi = null
12-23 09:10:30.510: D/AndroidRuntime(1025): Shutting down VM
12-23 09:10:30.510: W/dalvikvm(1025): threadid=1: thread exiting with uncaught exception (group=0xb3af9ba8)
12-23 09:10:30.540: E/AndroidRuntime(1025): FATAL EXCEPTION: main
12-23 09:10:30.540: E/AndroidRuntime(1025): Process: com.toggle, PID: 1025
12-23 09:10:30.540: E/AndroidRuntime(1025): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.toggle/com.toggle.MainActivity}: java.lang.NullPointerException
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.os.Handler.dispatchMessage(Handler.java:102)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.os.Looper.loop(Looper.java:136)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.ActivityThread.main(ActivityThread.java:5017)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at java.lang.reflect.Method.invokeNative(Native Method)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at java.lang.reflect.Method.invoke(Method.java:515)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at dalvik.system.NativeStart.main(Native Method)
12-23 09:10:30.540: E/AndroidRuntime(1025): Caused by: java.lang.NullPointerException
12-23 09:10:30.540: E/AndroidRuntime(1025):     at com.toggle.MainActivity.checkIfWifiIsOn(MainActivity.java:74)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at com.toggle.MainActivity.onCreate(MainActivity.java:29)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.Activity.performCreate(Activity.java:5231)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-23 09:10:30.540: E/AndroidRuntime(1025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
12-23 09:10:30.540: E/AndroidRuntime(1025):     ... 11 more
12-23 09:10:33.450: I/Process(1025): Sending signal. PID: 1025 SIG: 9

Anche mettendo una riga come quella che mi hai postato, la situazione non cambia. :(

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Problemi con il codice.
« Risposta #7 il: 23 Dicembre 2013, 18:36:30 CET »
0
Mi sa che qui abbiamo qualche problemino con la programmazione in generale, non solo con Android  :-)
Come ti ha suggerito bradipao, l'errore sta nell'oggetto Wifi, che non è stato ancora inizializzato quando viene invocato il metodo "checkIfWifiIsOn()", dato che dal codice che hai postato tu, l'inizializzazione avviene nel metodo successivo "setButtonClickListener()", ma oltretutto hai fatto un errore anche li...dato che per ottenere una istanza del WifiManager devi passare al metodo getSystemService questa costante "Context.WIFI_SERVICE" e non quella che passi tu...che è tutt'altra cosa !

Offline Cloud

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7
Re:Problemi con il codice.
« Risposta #8 il: 23 Dicembre 2013, 21:54:18 CET »
0
Ovvio che il problema è la programmazione, altrimenti non avrei chiesto aiuto ;D. Perciò ho chiesto un aiuto con il codice e qualche suggerimento.
« Ultima modifica: 23 Dicembre 2013, 21:56:10 CET da Cloud »