0

我想用我的android應用程序創建一個文件。我需要在特定的類中寫入文件。我目前擁有的代碼如下所示。當它試圖寫入文件時,我不斷收到nullpointerexception。下面列出了確切的錯誤。我是android新手,請詳細說明。在android上創建一個文件

有人可以告訴我我做錯了什麼,我該如何解決這個問題?


//the class where i need to create and write to the file 
public class DataRobot { 
    Context tThis; 
    FileOutputStream fOut; 
    OutputStreamWriter writer; 

    public DataRobot(SmartApp smartApp) extends Activity { 
     tThis = (Context) smartApp; 
    } 
    public void onCreate(Bundle savedInstanceState) { 
     try { 
      //file = new File("/sdcard", "test.csv"); 
      fOut = openFileOutput("test.csv", MODE_WORLD_READABLE); 
      writer = new OutputStreamWriter(fOut); 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    public void analyzeData(SmartDataObject temp) { 
     data = temp; 
     try { 
       //the following line is where the error is occurring. 
      writer.write(Double.toString(data.getHeartRate())); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

//the error 
03-26 03:47:53.924: WARN/System.err(273): java.lang.NullPointerException 
03-26 03:47:53.934: WARN/System.err(273):  at cpe495.smartapp.DataRobot.analyzeData(DataRobot.java:80) 
03-26 03:47:53.946: WARN/System.err(273):  at cpe495.smartapp.SmartApp$1.dataReceivedReceived(SmartApp.java:49) 
03-26 03:47:53.956: WARN/System.err(273):  at cpe495.smartapp.ConnectDevice.fireDataReceivedEvent(ConnectDevice.java:79) 
03-26 03:47:53.956: WARN/System.err(273):  at cpe495.smartapp.ConnectDevice.run(ConnectDevice.java:46) 
03-26 03:47:53.965: WARN/System.err(273):  at java.lang.Thread.run(Thread.java:1096) 

回答

0

下面的代碼是我想通了,並正在工作。對不起,發佈這麼長時間了。


public class DataRobot { 
    Context tThis; //was enabled for preferences 
    private FileOutputStream fOut; 
    private OutputStreamWriter writer; 

    public DataRobot(SmartApp smartApp) { 
     tThis = (Context) smartApp; 

    } 

    public void analyzeData(SmartDataObject temp) { 
     try { 
      fOut = tThis.openFileOutput("test.csv", tThis.MODE_APPEND); 
      writer = new OutputStreamWriter(fOut); 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      writer.write("Test");//0 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
0

你應該通過內容提供商的存取權限的文件,我認爲道路是錯誤的......看看這個file tutorial

+0

我已經使用,作爲一個參考。這是我從參考中得到的。我不得不改變一點,因爲它不適合我的實施。 – prolink007 2011-03-26 00:58:24

+0

我做了一些改變,這裏是發生的新錯誤,你有什麼想法如何擺脫這種新的nullpointerexception?我在代碼中發生了錯誤的地方發表了評論。 – prolink007 2011-03-26 03:55:04

+0

我在代碼中看不到任何錯誤,也許嘗試將數據變量聲明爲SmartDataObject – teiger 2011-03-26 13:52:09

3

看起來你是在做這個你構造函數。你不能那樣做。你需要等到onCreate(),這是你知道對象已經被初始化的時候。

+0

我認爲這個類必須是一個有onCreate()方法的活動嗎?我的課不是一項活動。 – prolink007 2011-03-26 03:18:42

+0

我做了一些改變,這裏是發生的新錯誤,你有什麼想法如何擺脫這種新的nullpointerexception?我在代碼中發生了錯誤的地方發表了評論。 – prolink007 2011-03-26 03:53:10