2013-05-08 144 views
0

我正在构建一个Android应用程序来测试主题上的人,后端是用Java编写的,它读取并解析CSV文件(硬编码的URL) ,前端是我的Android应用程序。java.lang.RuntimeException:无法启动活动ComponentInfo java.lang.NullPointerException

这是我的错误:

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 

这会导致我的程序崩溃。

这里是我的类:

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); 
    } 

这里是我的家datawhare类:

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); 
} 

我认为这个问题可能造成的,因为解析器是越来越设置为null。

+0

您在清单中获得了<使用权限android:name =“android.permission.WRITE_EXTERNAL_STORAGE”/>“? – Bigflow 2013-05-08 07:28:48

+0

请突出显示QuizAndroidGUI.java:36行。 – Egor 2013-05-08 07:29:13

+0

ClassLoader.getSystemResource?目的是什么? – Blackbelt 2013-05-08 07:29:32

回答

1

questions.csv文件到你的classpath并做到这一点:

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

正确加载该文件。

+0

如何放入我的课程路径? – 2013-05-08 07:37:21

+0

你有几种方法可以做到这一点。你在使用eclipse吗? – 2013-05-08 07:38:54

+0

是的,我正在使用eclipse。 – 2013-05-08 07:41:35

0

没有足够的线路信息,但我怀疑ClassLoader.getSystemResource("questions.csv")是不是你真正想要的东西,至少在我的经验中看到它是非常不寻常的。

我会将该文件放在assets目录中并使用AssetManager来读取该文件。

+0

有没有办法在不是android应用程序的文件中使用资产管理器?我有一个非Java的应用程序,它是用Java编写的,必须带一个文件参数才能返回给我测验问题。 – 2013-05-08 07:45:16

+0

不幸的是,你创建了一个阅读界面,并根据你所在的平台决定使用哪个实现。 – Zharf 2013-05-08 07:55:25

相关问题