Visualizzazione stampabile
-
exexception mi da null
Salve,
l'applicazione mi crasha
l'errore che mi viene da ex.get message e' null!
grazie
codice:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<string name="app_name">Halloword</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string android:id="@+id/android1" android:layout_width="wrap_content" android:layout_height="wrap_content" name="android">Android</string>
<string android:layout_width="wrap_content" android:id="@+id/string1" android:layout_height="wrap_content" name="androidpiccolo">Android e un sistema operativo interessante ed opensource</string>
</resources>
e questo
codice:
package com.example.halloword;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private TextView android,summary;
static final String LOG ="errore";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
android=(TextView) findViewById(R.id.android);
summary=(TextView) findViewById(R.id.summary);
try{
android.setText(R.string.android);
}catch(Exception e){
Log.d(LOG,"hereitis: "+e.getMessage());
//String mistake=ex.getMessage();
//android.setText("Ecco e' successo"+mistake);
//Toast.makeText(this, mistake, Toast.LENGTH_LONG).show();
}
//summary.setText(R.string.androidpiccolo);
}
}
-
Ciao, per prima cosa dovresti usare il metodo getText() quando devi prendere una stringa dalla classe R. Seconda cosa, ottieni un Null Pointer Exception perché "ex" non è dichiarato da nessuna parte. Terzo perché fai il try catch sul metodo setText()? :confused:
-
Quote:
Originariamente inviato da
Crotan
Ciao, per prima cosa dovresti usare il metodo getText() quando devi prendere una stringa dalla classe R. Seconda cosa, ottieni un Null Pointer Exception perché "ex" non è dichiarato da nessuna parte. Terzo perché fai il try catch sul metodo setText()? :confused:
Caro Crotan,grazie ma
con tutta la buona volonta' purtroppo non ti capisco.
1)innanzitutto il compiler non mi fa applicare questo android.getText(R.string.andro); error message(the method gettext() in textview mode in not applicable for the arguments(int)
2)anche levando il blocco try/catch( dove e' quindi l ex o e che tu citi e che non capisco dove vada dichiarato) il codice di sotto nonfunziona
3) faccio il try catch perche' ho appreso su questo meraviglioso forum che a volte puo' essere usato per debbuggare
infine ho dichiarato un if variabile e' null allora mandami un toast message, ed infatti mi e'stato mandato, quindi la variabile android e' null, in qualche modo e' come se non fosse istanziata
grazie
codice:
package com.example.halloworld;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private TextView android,android_summary;
static final String LOG="errore";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
android=(TextView) findViewById(R.id.android);
android_summary=(TextView) findViewById(R.id.android_summary);
//try{
android.setText(R.string.andro);
//}catch(Exception e){
//Log.d(LOG,"hereitis: "+e.getMessage());
//String mistake=ex.getMessage();
//android.setText("Ecco e' successo"+mistake);
//Toast.makeText(this, mistake, Toast.LENGTH_LONG).show();
}
//summary.setText(R.string.androsum);
}
-
Quote:
Originariamente inviato da
ndrokki
1)innanzitutto il compiler non mi fa applicare questo android.getText(R.string.andro); error message(the method gettext() in textview mode in not applicable for the arguments(int)
Scusa, mi sono confuso io. Il metodo è getString(). La forma corretta è
Quote:
2)anche levando il blocco try/catch( dove e' quindi l ex o e che tu citi e che non capisco dove vada dichiarato) il codice di sotto nonfunziona
Cosa intendi per non funziona? Crasha?
Quote:
3) faccio il try catch perche' ho appreso su questo meraviglioso forum che a volte puo' essere usato per debbuggare
Sì, quello che dici è vero ma nel tuo caso fai un semplice setText(). Cosa c'è da dover debuggare? L'unico controllo che potresti fare nel caso in cui hai una stringa è vedere se questa sia nulla o meno. Fine.
Quote:
infine ho dichiarato un if variabile e' null allora mandami un toast message, ed infatti mi e'stato mandato, quindi la variabile android e' null, in qualche modo e' come se non fosse istanziata
Certo che non è istanziata. Vedi da qualche parte nel tuo codice un riferimento ad una eccezione chiamata "ex"? Sotto il codice corretto, pulito e indentato.
codice:
package com.example.halloworld;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
TextView android, android_summary;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
android = (TextView)findViewById(R.id.android);
android_summary = (TextView)findViewById(R.id.android_summary);
try {
android.setText(getString(R.string.andro));
} catch(Exception e)
//Se vuoi catturare il messaggio d'errore generato da questa eccezione devi usare "e" non "ex"
android.setText("Ecco e' successo "+e.getMessage());
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
//Prima usavi "summary" ma nel codice non c'è nessun oggetto chiamato "summary". Al massimo android_summary.
android_summary.setText(getString(R.string.androsum));
}
-
Quote:
Originariamente inviato da
Crotan
Scusa, mi sono confuso io. Il metodo è getString(). La forma corretta è
Cosa intendi per non funziona? Crasha?
si esatto anche copiaincollando il codice che mi hai dato tu,:(
Quote:
Sì, quello che dici è vero ma nel tuo caso fai un semplice setText(). Cosa c'è da dover debuggare? L'unico controllo che potresti fare nel caso in cui hai una stringa è vedere se questa sia nulla o meno. Fine.
Certo che non è istanziata. Vedi da qualche parte nel tuo codice un riferimento ad una eccezione chiamata "ex"? Sotto il codice corretto, pulito e indentato.
grazie per l aiuto, segue il codice che mi hai dato tu che pure crasha( aggiunte due parentesi graffe ed cambiato androsum to Androsum perche'se no non compilava:
codice:
package com.example.halloworld;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
TextView android, android_summary;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
android = (TextView)findViewById(R.id.android);
android_summary = (TextView)findViewById(R.id.android_summary);
try {
android.setText(getString(R.string.andro));
} catch(Exception e) {
//Se vuoi catturare il messaggio d'errore generato da questa eccezione devi usare "e" non "ex"
android.setText("Ecco e' successo "+e.getMessage());
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
//Prima usavi "summary" ma nel codice non c'è nessun oggetto chiamato "summary". Al massimo android_summary.
android_summary.setText(getString(R.string.Androsum));
}
}
-
Crasha dove? A quale riga? Con quale eccezione? Se continua a crashare sull'e.getMessage() sai che ti dico? Togli tutto il try-catch perchè secondo me è assolutamente inutile farlo sul metodo setText().
-
ciao Crotan,
grazie per la pazienza
anche levando il blocco try catch il programma non parte, e nel tutorial che seguivo
parte anche semplicemente con variabile.setText(r.string.riferimento)
usando log dentro Logcat mi dice :null, che mi suggerisce lídea che la variabile android non sia stata inizializzata
levando la riga suddetta ovvero android.setText(getString(R.string.andro));
il programma parte e non crasha quindi dedurrei senza dubbi che e'questa la riga incriminata
di piu'' non so cosa dirti che e'il secondo programma che faccio
-
e se scrivi:
android.setText(getString(R.string.androidpiccolo) );
???
Nik
-
Ciao Crotan,
dopo un week end sull'errore ho scoperto che e' un null pointer exception, e che se dal layout sotto text metto sotto text @string/andro funziona, ma da Java setText non riesco a richiamarlo, ho pensato che potrebbe essere dovuto al fatto che forse sotto la directory res layout ho due xml files activity_main.xml e fragment_main.xml e che la string viene creata in strings.xml invece che con ad esempio
<string name="Andro3">AndroEcco</string>
con la linea
<string android:id="@+id/string1" android:layout_height="wrap_content" android:layout_width="wrap_content" name="Andro3">AndroEcco</string>
cosi ho provato a sostituire, ma niente non funziona l'app crasha sempre se provo a richiamare la stringa con setText(getString(R.string.(variabile));
ecco il file di logCat
Quote:
07-07 04:11:15.040: D/AndroidRuntime(1297): Shutting down VM
07-07 04:11:15.040: W/dalvikvm(1297): threadid=1: thread exiting with uncaught exception (group=0xb3acaba8)
07-07 04:11:15.060: E/AndroidRuntime(1297): FATAL EXCEPTION: main
07-07 04:11:15.060: E/AndroidRuntime(1297): Process: com.example.hallo4, PID: 1297
07-07 04:11:15.060: E/AndroidRuntime(1297): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hallo4/com.example.hallo4.MainActivity}: java.lang.NullPointerException
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2195)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2245)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.ActivityThread.access$800(ActivityThre ad.java:135)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1196)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.os.Handler.dispatchMessage(Handler.java:10 2)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.os.Looper.loop(Looper.java:136)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.ActivityThread.main(ActivityThread.jav a:5017)
07-07 04:11:15.060: E/AndroidRuntime(1297): at java.lang.reflect.Method.invokeNative(Native Method)
07-07 04:11:15.060: E/AndroidRuntime(1297): at java.lang.reflect.Method.invoke(Method.java:515)
07-07 04:11:15.060: E/AndroidRuntime(1297): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:779)
07-07 04:11:15.060: E/AndroidRuntime(1297): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:595)
07-07 04:11:15.060: E/AndroidRuntime(1297): at dalvik.system.NativeStart.main(Native Method)
07-07 04:11:15.060: E/AndroidRuntime(1297): Caused by: java.lang.NullPointerException
07-07 04:11:15.060: E/AndroidRuntime(1297): at com.example.hallo4.MainActivity.onCreate(MainActiv ity.java:25)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.Activity.performCreate(Activity.java:5 231)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1087)
07-07 04:11:15.060: E/AndroidRuntime(1297): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2159)
07-07 04:11:15.060: E/AndroidRuntime(1297): ... 11 more
07-07 04:11:19.760: I/Process(1297): Sending signal. PID: 1297 SIG: 9
-
provi a scrivere
android.setText(getString(R.string.Andro3) );
poi fai come vuoi ciao