2017-08-24 36 views
0

我想閱讀資產文件夾下的文件,然後我想從我的文件中獲取文本作爲Main_Activity類中的返回值。這是我的代碼。如何在沒有擴展Activity類的情況下從java類的assets文件夾中讀取文件?

Main.java

這是在主類中的方法。

ReadFile.java

fileReaing()方法是在ReadFile.java。

public String fileReading() throws IOException { 
    StringBuilder sb = new StringBuilder();  
    AssetManager am = getAssets(); 
    InputStream is = am.open("a.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
    String line = null; 

    while ((line = br.readLine()) != null) { 
     sb.append(line + "\n"); 
    } 
    return sb.toString(); 
} 
} 

運行此代碼後,我發現以下錯誤。

Process: com.csh.readfile, PID: 4379 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.csh.readfile/com.csh.readfile.Main}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content. 
Context.getAssets()' on a null object reference 

請幫我解決這個錯誤。我只是Android的初學者,並非常感謝所有人。

+0

你初始化 「this」 關鍵字的OnCreate背景??? –

+0

@SnehalGongle,不,先生,我想讀另一個java calss文件,然後我想從文件中獲取文本作爲返回值。我應該怎麼做。 –

+0

你可以參考@omar休息的答案,我會建議你使用getApplicationContext()而不是上下文 –

回答

0

問題是你沒有通過contextfileReading()方法ReadFile.java,嘗試,如下面

ReadFile f= new ReadFile(); 
    try { 
     str = f.fileReading(getApplicationContext()); 
    } 

然後

public String fileReading(Context c) throws IOException { 
    StringBuilder sb = new StringBuilder();  
    AssetManager am = c.getAssets(); 
    InputStream is = am.open("a.txt"); 
    ..... 
    ..... 
} 
+0

我明白了。這對我很有用。非常感謝你,真的很感謝你。 –

+0

如果這解決了你的問題,考慮接受答案:)........ –

0

兩種可能性:

1)傳遞上下文你的方法。

public String fileReading(Context ctx) throws IOException { 
StringBuilder sb = new StringBuilder(); 
AssetManager am = ctx.getAssets(); 
InputStream is = am.open("a.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
String line = null; 
while ((line = br.readLine()) != null) { 
sb.append(line + "\n"); 
} 
return sb.toString(); 
} 

2)傳入上下​​文到你的構造

public class ReadFile{ 
private Context ctx; 

public ReadFile(Context ctx){ 
this.ctx = ctx: 
} 

public String fileReading() throws IOException { 
StringBuilder sb = new StringBuilder(); 
AssetManager am = ctx.getAssets(); 
InputStream is = am.open("a.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
String line = null; 
while ((line = br.readLine()) != null) { 
sb.append(line + "\n"); 
} 
return sb.toString(); 
} 
} 
+0

是的,非常感謝你的回答。這對我來說也是另一種方式。真的很感謝你。 –

+0

如果有幫助,考慮接受答案或投票。 –

+0

如何投票,先生 –

相關問題