2013-05-08 4 views
0

Je crée une application Android pour interroger des personnes sur des sujets, le backend est écrit en Java et il lit et analyse le fichier CSV (URL codée en dur) , et l'extrémité avant est mon application Android.java.lang.RuntimeException: Impossible de démarrer l'activité ComponentInfo java.lang.NullPointerException

Voici mon erreur:

05-08 01:19:00.792: E/AndroidRuntime(790): java.lang.RuntimeException: Unable to start activity ComponentInfo{cs314.adamnick.p4/cs314.adamnick.p4.QuizTakerGUI}: java.lang.NullPointerException 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.os.Looper.loop(Looper.java:123) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-08 01:19:00.792: E/AndroidRuntime(790): at java.lang.reflect.Method.invokeNative(Native Method) 
05-08 01:19:00.792: E/AndroidRuntime(790): at java.lang.reflect.Method.invoke(Method.java:521) 
05-08 01:19:00.792: E/AndroidRuntime(790): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-08 01:19:00.792: E/AndroidRuntime(790): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-08 01:19:00.792: E/AndroidRuntime(790): at dalvik.system.NativeStart.main(Native Method) 
05-08 01:19:00.792: E/AndroidRuntime(790): Caused by: java.lang.NullPointerException 
05-08 01:19:00.792: E/AndroidRuntime(790): at wharehouse.QuizAndroidGUI.<init>(QuizAndroidGUI.java:36) 
05-08 01:19:00.792: E/AndroidRuntime(790): at cs314.adamnick.p4.QuizTakerGUI.onCreate(QuizTakerGUI.java:38) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-08 01:19:00.792: E/AndroidRuntime(790): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
05-08 01:19:00.792: E/AndroidRuntime(790): ... 11 more 

Ce qui provoque mon programme de tomber en panne.

Voilà ma classe:

public class QuizTakerGUI extends Activity { 

    private RadioButton answer1; 
    private RadioButton answer2; 
    private RadioButton answer3; 
    private RadioButton answer4; 

    private Button submit; 
    private Button previous; 
    private Button next; 
    private Button finish; 

    private TextView questionArea; 

    private QuizAndroidGUI dataWharehouse; 
    private QuizQuestion currentQuestion; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_quiz_taker); 

     dataWharehouse = new QuizAndroidGUI(this); 

     answer1 = (RadioButton) findViewById(R.id.answer1); 
     answer2 = (RadioButton) findViewById(R.id.answer2); 
     answer3 = (RadioButton) findViewById(R.id.answer3); 
     answer4 = (RadioButton) findViewById(R.id.answer4); 

     questionArea = (TextView) findViewById(R.id.quizQuestion); 


     submit = (Button) findViewById(R.id.submitAnswer); 
     previous = (Button) findViewById(R.id.prev); 
     next = (Button) findViewById(R.id.next); 
     finish = (Button) findViewById(R.id.finish); 

     submit.setOnClickListener(submitHandler); 
     previous.setOnClickListener(previousHandler); 
     next.setOnClickListener(nextHandler); 
     finish.setOnClickListener(finishHandler); 
    } 

Voici ma classe datawhare maison:

public QuizAndroidGUI(QuizTakerGUI app){ 
    URL path = ClassLoader.getSystemResource("questions.csv"); 
    this.androidApplication = app; 
    NUMBERofQUIZES = 10; 
    // since we implement quiz ui we pass in the current program 
    quizTaker = new QuizTaker(this); 
    try { 
     // passing in the csv file hard coded 
     parser = new QuestionParser(new File(path.toURI())); 
    } catch (FileNotFoundException e) { 
     parser = null; 
     e.printStackTrace(); 
    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    quizTaker.startAndDisplayQuiz("Android Quiz", this.NUMBERofQUIZES, this.parser); 
} 

Je pense que la question a causé peut-être parce que l'analyseur se prépare à null.

+0

Vous avez obtenu le '' dans le manifeste? – Bigflow

+0

Veuillez mettre en évidence la ligne QuizAndroidGUI.java:36. – Egor

+0

ClassLoader.getSystemResource? Quel est le but? – Blackbelt

Répondre

1

Placez le fichier questions.csv dans votre classpath et faire ceci:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resource = loader.getResource("myfile"); 

Pour charger le fichier correctement.

+0

Comment puis-je mettre dans mon chemin de classe? –

+0

Vous avez plusieurs façons de le faire. Utilisez-vous eclipse? –

+0

Oui, j'utilise eclipse. –

0

Pas assez d'informations de ligne mais je pense que ClassLoader.getSystemResource("questions.csv") n'est pas ce que vous vouliez vraiment, il est très inhabituel de le voir dans Android au moins dans mon expérience.

Je mettrais le fichier dans le répertoire assets et utiliserais AssetManager pour lire le fichier.

+0

Existe-t-il un moyen d'utiliser Asset Manager dans un fichier qui n'est pas une application Android? J'ai une application qui est non-androïde qui est écrite en Java qui doit prendre un argument d'un fichier pour me retourner des questions de quiz. –

+0

Malheureusement non, mais vous créez une interface de lecture et décidez quelle implémentation utiliser en fonction de la plate-forme sur laquelle vous vous trouvez. – Zharf

Questions connexes