2015-06-16 3 views
0

Я пытаюсь передать Context моих ListViewAdapter класса с помощью:не удается получить контекст при использовании AppCompatAcitvity

private ContactAdapter adapter = new ContactAdapter(this); 

Но я получаю нулевой указатель в моем ContactAdapter классе, он не может найти Context:

public class MainActivity extends AppCompatActivity { 

Logcat:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference 
     at info.androidhive.materialnavbar.ContactAdapter.readTextFileAsList(ContactAdapter.java:67) 
     at info.androidhive.materialnavbar.ContactAdapter.<init>(ContactAdapter.java:30) 
     at info.androidhive.materialnavbar.MainActivity.onCreate(MainActivity.java:18) 

Метод ИНСИ де Adapter с использованием контекста:

public List<Contact> readTextFileAsList(Context ctx, int resId) 
{ 
    InputStream inputStream = ctx.getResources().openRawResource(resId); 

    InputStreamReader inputreader = new InputStreamReader(inputStream); 
    BufferedReader bufferedreader = new BufferedReader(inputreader); 
    String line; 
    List<Contact> list = new ArrayList<>(); 

    try 
    { 
     while ((line = bufferedreader.readLine()) != null) 
     { 
      String[] a = line.split(";"); 
      list.add(new Contact(a[0],a[1],a[2],a[3],a[4])); 
     } 
    } 
    catch (IOException e) 
    { 
     return null; 
    } 
    return list; 
} 

Когда адаптер прибудет инициализируется:

под конструктором

public class ContactAdapter extends BaseAdapter { 
    Context ctx; 

public ContactAdapter(Context ctx) { 
    this.ctx = ctx; 
} 

private List<Contact> codeLearnChapterList = readTextFileAsList(ctx, R.raw.testcrawljs); 
+0

Где находится ваш logcat ??? –

ответ

3

Не используйте Activity в инициализаторе, так как деятельность еще не готова. Изменение:

private ContactAdapter adapter = new ContactAdapter(this); 

к:

private ContactAdapter adapter; 

И добавить:

adapter = new ContactAdapter(this); 

к вашему методу onCreate(), где-то после super.onCreate().


UPDATE

private List<Contact> codeLearnChapterList = readTextFileAsList(ctx, R.raw.testcrawljs); 

ctx является null здесь, потому что вы не присвоили ему значение еще. Переместите вызов readTextFileAsList() в конструктор.

+0

Я вижу, но контекст будет по-прежнему нулевым. – Lozeputten

+2

@ Lozeputten: Тогда, возможно, вам следует отредактировать вопрос, чтобы показать вашу реализацию 'readTextFileAsList()', поскольку именно там и лежит ваша проблема. – CommonsWare

+0

Я добавил метод – Lozeputten