我正在尝试读取其中包含json格式内容的txt文件,我正在使用异步任务从资产文件夹中读取文件,但是获取nullpointer异常。下面是我的代码。
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
不确定我在哪里做错了。
答案 0 :(得分:3)
你没有初始化上下文对象,这就是它给你nullpointer exception
初始化它的原因..
Context c=getApplicationContext();
答案 1 :(得分:2)
问题出现在AssetManager assetManager = c.getAssets();
上,因为您没有传递正确的Context
。
您宣布Context
但未在AsynTask
的任何位置初始化,请执行以下操作:
Context c;
c=activity.this;
否则,如果您在同一个班级中使用asyntask,则直接将活动Context
传递给您的函数。
readFileFromAssets(文件名,activity.this);
<强>更新强>
创建DownloadJSON
的构造,获取上下文并使用如下所示的相同上下文:
public class DownloadJSON extends AsyncTask<Void, Void, Void> {
Context ctx;
public DownloadJSON(Context c) {
ctx=c;
}
在调用DownloadJSON
时必须通过Context
。
答案 2 :(得分:1)
由于Context,您正在获取NullPointer,Context正在传递null,因此请将Context初始化为
上下文c; c = getApplicationContext()或c = Activity name.this
答案 3 :(得分: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);
...谢谢
答案 4 :(得分:0)
每当您从asynctask
拨打此activity
时,请将context
作为参数传递。这最终是上下文错误。
所以请正确的方式传递上下文。
我希望你明白。