2013-09-24 38 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

相关问题