2013-09-24 111 views
0

我正在嘗試讀取其中包含json格式內容的txt文件,我正在使用異步任務從資產文件夾中讀取文件,但獲得了空指針異常..下面是我的碼。從assests文件夾中讀取文本文件時出現NullpointerException

public class DownloadJSON extends AsyncTask<Void, Void, Void> { 
    private MyDBAdapter dbHelper; 

    String fileName = "json.txt"; 
    Context c; 
    private static final String result = null; 
    ArrayList<HashMap<String, String>> arraylist; 

    @Override 
    protected Void doInBackground(Void... params) { 

     readFileFromAssets(fileName,c); 
     return null; 

} 

public static String readFileFromAssets(String fileName, Context c) { 
    AssetManager assetManager = c.getAssets(); 
    InputStream is = null; 
     try { 
      is = assetManager.open(fileName); 
      int size = is.available(); 
      byte[] buffer = new byte[size]; 
      is.read(buffer); 
      is.close(); 
      String text = new String(buffer); 
System.out.println("tex===========t"+ text); 
      return text; 

     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
} 

下面是我的日誌跟蹤

09-24 10:53:25.430: E/AndroidRuntime(1714): Caused by: java.lang.NullPointerException 
09-24 10:53:25.430: E/AndroidRuntime(1714):  at com.markupartist.android.actionbar.example.DownloadJSON.readFileFromAssets(DownloadJSON.java:75) 
09-24 10:53:25.430: E/AndroidRuntime(1714):  at com.markupartist.android.actionbar.example.DownloadJSON.doInBackground(DownloadJSON.java:27) 
09-24 10:53:25.430: E/AndroidRuntime(1714):  at com.markupartist.android.actionbar.example.DownloadJSON.doInBackground(DownloadJSON.java:1) 
09-24 10:53:25.430: E/AndroidRuntime(1714):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
09-24 10:53:25.430: E/AndroidRuntime(1714):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
09-24 10:53:25.430: E/AndroidRuntime(1714):  ... 5 more 

不知道我在哪裏做錯了。

+1

請發表您的logcat錯誤 – dipali

+0

@dipali喜與日誌 – teekib

+0

更新什麼'DownloadJSON.java 75號線? –

回答

0

每當您從activity調用asynctask時,請通過context作爲參數。這最終是上下文的錯誤。

所以請正確的方式來傳遞上下文。

我希望你能理解。

+0

嗨,這個DownloadJson不是一個活動它的外部類,現在如何傳遞上下文 – teekib

+0

您好我通過上下文在構造函數中,它的工作謝謝你 – teekib

+0

@ pankaj你說什麼根據你的評論? – dipali

3

你不會被初始化,這就是爲什麼它是給你nullpointer exception初始化像這樣的上下文對象..

Context c=getApplicationContext(); 
+0

其顯示錯誤在getApplicationContext()..初始化時,要求創建方法...? – teekib

+0

如果它在活動中初始化它就像Context c = Activity.this; –

2

問題將是對這個AssetManager assetManager = c.getAssets();,因爲你沒有經過適當的Context。如果您使用同一類asyntask然後直接活動Context傳遞給你的函數

Context c; 

c=activity.this; 

否則:

您聲明Context,但不是在你的任何地方AsynTask初始化,這樣做以下。

readFileFromAssets(fileName,activity.this);

更新

創建的DownloadJSON建設,獲取上下文,並使用相同的上下文象下面這樣:

public class DownloadJSON extends AsyncTask<Void, Void, Void> { 
    Context ctx; 
    public DownloadJSON(Context c) { 
    ctx=c; 

    } 

而且同時呼籲DownloadJSON通必要Context

+0

嗨,這個DownloadJson不是一個活動它的外部類,現在如何在這裏傳遞上下文 – teekib

+0

@teekib檢查我更新的答案 – RobinHood

1

你得到,因爲語境的空指針,上下文是傳遞null,因此使上下文初始化像

語境℃; C = getApplicationContext()或C =活動name.this

1

您尚未初始化上下文。所以首先讓你的類的構造函數...

ArrayList<HashMap<String, String>> arraylist; 
Context ctx; 

public DownloadJSON (Context c, ArrayList<HashMap<String, String>> list) { 
    // TODO Auto-generated constructor stub 
    this.ctx = c; 
    this.arraylist= list; 

} 

最後使用這個CTX對象
readFileFromAssets(fileName,ctx); 

感謝....

+0

@ piyush..Exctly ...感謝piyush已經做到了。 – teekib

相關問題