2013-09-24 2 views
0

Я пытаюсь прочитать txt-файл с содержимым json-формата в нем, я использую async-задачу, чтобы прочитать файл из папки с ресурсами, но получаю исключение nullpointer..below is my код.NullpointerException при чтении текстового файла из папки assests

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

всякий раз, когда вы называете это asynctask от activity, пожалуйста, пройдите context в качестве параметра. Это, наконец, ошибка контекста.

поэтому, пожалуйста, правильно передайте контекст.

Надеюсь, вы понимаете.

+0

hi this DownloadJson не является его внешним классом, теперь как передать контекст здесь – teekib

+0

Привет, я прошел контекст в конструкторе, он работал, спасибо – teekib

+0

@pankaj, что вы говорите, основываясь на своем комментарии? – dipali

3

Вы не инициализируется объект контекста, именно поэтому он дает вам nullpointer exception инициализировать его, как это ..

Context c=getApplicationContext(); 
+0

, показывающий его ошибку при getApplicationContext() .. при инициализации, запрашивая метод create ... ??? – teekib

+0

Если это в действии, инициализируйте его как Context c = Activity.this; –

2

Проблема была бы на этом AssetManager assetManager = c.getAssets();, потому что вы не проходя должного Context.

Вы объявляете Context, но не инициализировать в любом месте AsynTask, сделать что-то, как показано ниже:

Context c; 

c=activity.this; 

Else, если вы используете asyntask в одном классе затем перейти непосредственно активность Context к вашей функции.

readFileFromAssets (fileName, activity.this);

Обновлено

Создание Строительство DownloadJSON, получить контекст и использовать тот же контекст, как показано ниже:

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

    } 

И при вызове DownloadJSON проходят необходимую Context.

+0

hi this DownloadJson не является деятельностью своего внешнего класса, теперь как передать контекст здесь – teekib

+0

@teekib проверить мой обновленный ответ – RobinHood

1

Вы получаете NullPointer из-за контекста, контекст проходит нулевой, так что контекст инициализации как

Context с; с = getApplicationContext() ИЛИ с = активность 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

Смежные вопросы