2012-02-13 107 views
0

我正在创建一个File IO项目,而且我的组件视图出现问题。我知道它有我的TextView的东西,但我是一个新手,不能弄明白。这是下面的代码:java.lang.RuntimeException:无法使用TextView启动活动ComponentInfo

package com.IPR2.viewlog; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 



public class Main extends Activity { 
    public TextView tv; 

    /** Called when the activity is first created. */ 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     FileOperations fileOperations = new FileOperations(); 
     Testing testing = new Testing(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tv = (TextView) findViewById(R.id.TextView01); 
     testing.checkExternalMedia(); 
     //fileOperations.CreateFile("example.txt"); 



    } 



} 

这里是日志吧:

02-13 19:54:47.199: W/dalvikvm(1533): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
02-13 19:54:47.209: E/AndroidRuntime(1533): FATAL EXCEPTION: main 
02-13 19:54:47.209: E/AndroidRuntime(1533): {com.IPR2.viewlog/com.IPR2.viewlog.ViewLog}: java.lang.NullPointerException 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.os.Looper.loop(Looper.java:130) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at java.lang.reflect.Method.invoke(Method.java:507) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at dalvik.system.NativeStart.main(Native Method) 
02-13 19:54:47.209: E/AndroidRuntime(1533): Caused by: java.lang.NullPointerException 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at com.IPR2.viewlog.Testing.checkExternalMedia(Testing.java:43) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at com.IPR2.viewlog.ViewLog.onCreate(ViewLog.java:31) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
02-13 19:54:47.209: E/AndroidRuntime(1533):  ... 11 more 

我使用另一个类,并呼吁tv.append(“文件没有保存!”)作为调试。如果我评论一下,问题就会消失。我想我不正确地处理它,并且知道它应该很容易修复。我知道我可以用其他方式进行调试,但我想了解如何做到这一点,我想不会再出现此错误是这样的:]

package com.IPR2.viewlog; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 

import android.os.Environment; 
import android.widget.Toast; 

public class FileOperations extends Main{ 



     public void CreateFile(String fileName) 
     { 
     try { 
      File root = new File(Environment.getExternalStorageDirectory(), 
        "Nullwall"); 
      if (!root.exists()) { 
       root.mkdirs(); 
      } 
      tv.append("\nLog File Created In Directory: " + root); 
      File gpxfile = new File(root, fileName); 
      FileWriter writer = new FileWriter(gpxfile, true); 
      writer.write(""); 
      writer.flush(); 
      writer.close(); 
      Toast.makeText(this, fileName + " Log Successfully Created!", 
        Toast.LENGTH_SHORT).show(); 
     } catch (IOException e) { 
      tv.append(" \n File not Saved! CreateLogFile() Broken!"); 
     } 
    } 
+0

我觉得在设计中真的不太好,为什么FileOperations扩展Main? – kosa 2012-02-13 20:41:29

+0

就像我说的,新手!我试图让电视工作。有关你如何做的建议?我一直在努力学习。 – PeterL 2012-02-13 21:08:30

回答

0
package com.IPR2.viewlog; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 



public class Main extends Activity { 
    public TextView tv; 

    /** Called when the activity is first created. */ 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     FileOperations fileOperations = new FileOperations(); 
     Testing testing = new Testing(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     tv = (TextView) findViewById(R.id.TextView01); 
     //testing.checkExternalMedia(); 
     createFile("example.txt"); 
    } 


    public void createFile(String fileName) 
    { 
     try { 
      File root = new File(Environment.getExternalStorageDirectory(), 
        "Nullwall"); 
      if (!root.exists()) { 
       root.mkdirs(); 
      } 
      tv.append("\nLog File Created In Directory: " + root); 
      File gpxfile = new File(root, fileName); 
      FileWriter writer = new FileWriter(gpxfile, true); 
      writer.write(""); 
      writer.flush(); 
      writer.close(); 
      Toast.makeText(this, fileName + " Log Successfully Created!", 
        Toast.LENGTH_SHORT).show(); 
     } catch (IOException e) { 
      tv.append(" \n File not Saved! CreateLogFile() Broken!"); 
     } 
} 

我不知道如果这个代码工作中。但它应该是。所以现在我会试着解释它。 如果你创建一个TextView对象电视,那么你应该从同一个类中引用它(或者你可以产生一个方法来访问它)。

其次,你应该改善你的架构。如果一个类名为FileOperations,那么我希望看到有方法和字段来处理文件。 FileOperations不是更新UI的适当位置。

三,如果只有一种方法,为什么你为它创建一个单独的类?

您的代码中的问题是无法从您的派生类访问电视。

+0

类文件操作有许多不同的方法;我隔离了一个示例问题来演示问题。我有几个班,都有电视。我明白这个答案应该也适用,如果我想要一个班级,但由于我在其他四个班级中有大约20种其他方法,我想要一种方法: '' '1。使用tv.append,如上面的不同类所示。如果这不能完成或不应该完成,你能提供一个如何以类似的方式抛出错误的例子吗?谢谢!' – PeterL 2012-02-13 22:41:46

+0

您无法访问您的TextView。例如,如果要分开类,可以将文本附加为返回语句。但不要扩展主类 - 它会让你的项目变得非常糟糕。 – Yury 2012-02-13 22:45:45

+0

好的!我如何添加一些简单的话来说“这是坏的,修复它!”这很容易,并会出现在程序中? – PeterL 2012-02-13 22:58:06

相关问题