2012-02-13 15 views
0

File IO Projectを作成していますが、コンポーネントビューに問題があります。私はそれが私の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

+0

私が言ったように、初心者!私はテレビに仕事をしようとしていた。どのようにそれを行うにはどのような提案?私はいつも学びたいと思っています。 – PeterL

答えて

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オブジェクトtvを作成する場合は、同じクラスからそのオブジェクトを参照する必要があります(または、そのメソッドにアクセスするメソッドを生成することもできます)。

第2に、アーキテクチャを改善する必要があります。 FileOperationsと呼ばれるクラスの場合、ファイルを処理するメソッドとフィールドがあるはずです。 FileOperationsはUIを更新するための適切な場所ではありません。

3つ目の方法がある場合は、別のクラスを作成するのはなぜですか?

コードの問題は、派生クラスからtvにアクセスできないことです。

+0

クラスファイル操作にはさまざまな方法があります。私はこの問題を実証するために問題の例を分けた。私はいくつかのクラスを持っています。 1つのクラスを欲しければこの答えがうまくいくはずですが、他の4つのクラスで約20のメソッドがあるので、私は次のようにしたいと思います: '' '1。上のように別のクラスに示すように、tv.appendを使用してください。これを行うことができない場合や、行わない場合は、同様の方法でエラーをスローする方法の例を提示できますか?ありがとう! ' – PeterL

+0

TextViewにアクセスすることはできません。たとえば、クラスを分離する場合は、テキストをreturn文として追加することができます。しかし、Mainクラスを拡張しないでください - あなたのプロジェクトを大変混乱させます。 – Yury

+0

よろしく!どのように私は "これは壊れて、それを修正!"と言って簡単な何かを追加することができますそれは簡単でプログラムに表示されますか? – PeterL

関連する問題