2015-02-17 3 views
-1

Теперь я сталкиваюсь с этой ошибкой, когда пытаюсь заполнить данные json внутри своего списка. FYI, это приложение имеет только одно действие, потому что я использую tabhost и несколько фрагментов. Это из-за того, что я использую фрагмент и tabhost? Я получил это сообщение об ошибке:Android - java.lang.NullPointerException, CustomAdapter.getView (CustomAdapter.java:XX)

02-17 17:24:59.761: E/AndroidRuntime(4095): java.lang.NullPointerException 
02-17 17:24:59.761: E/AndroidRuntime(4095):  at com.revivalx.xxxxx.popular.HistoryListAdapter.getView(HistoryListAdapter.java:64) 

Ошибка произошла в этой строке внутри HistoryListAdapter.java.

thumbNail.setImageUrl(user.getProfilePhotoUrl(), imageLoader); 

Initialize активность (HomeActivity.java)

public class HomeActivity extends ActionBarActivity { 

    /* everything is coding..*/ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.bottom_tabs); 
     mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

     b = new Bundle(); 
    b.putString("key", "History"); 
    mTabHost.addTab(mTabHost.newTabSpec(TAB_2_TAG).setIndicator("History",getResources().getDrawable(R.drawable.tab_two)), HistoryFragment.class, b); 
    mTabHost.getTabWidget().getChildAt(1).setBackgroundColor(Color.parseColor("#D6D5D6")); 
    /* everything is coding..*/ 
    } 

    /* everything is coding..*/ 

} 

Я уже замечаю, какая часть ошибка происходит.

HistoryListAdapter.java

public class HistoryListAdapter extends BaseAdapter { 
    private LayoutInflater inflater; 
    private List<User> users; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
    public HistoryListAdapter(Activity activity, List<User> users) { 
     this.users = users; 
     inflater = activity.getLayoutInflater(); 
    } 
    @Override 
    public int getCount() { 
     return users.size(); 
    } 
    @Override 
    public Object getItem(int location) { 
     return users.get(location); 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) 
      convertView = inflater.inflate(R.layout.list_row, parent,false); 
     if (imageLoader == null) 
      imageLoader = AppController.getInstance().getImageLoader(); 
     NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.thumbnail); 
     TextView name = (TextView) convertView.findViewById(R.id.name); 
     TextView lastActive = (TextView) convertView.findViewById(R.id.lastActive); 
     User user = users.get(position); 
     thumbNail.setImageUrl(user.getProfilePhotoUrl(), imageLoader);// ERROR HERE 
     name.setText(user.getName()); 
     lastActive.setText(user.getLastActive()); 
     return convertView; 
    } 

} 

HistoryFragment (Где я называю HistoryListAdapter здесь)

public class HistoryFragment extends Fragment { 

private List<User> userList = new ArrayList<User>(); 
private ListView listView; 
private HistoryListAdapter adapter; 

public HistoryFragment() { 
    // TODO Auto-generated constructor stub 

} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
} 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     View v = LayoutInflater.from(getActivity()).inflate(R.layout.activity_history_fragment, 
       null); 

     listView = (ListView) v.findViewById(R.id.list); 
    adapter = new HistoryListAdapter(getActivity(),this.userList); 
    listView.setAdapter(adapter); 

    /* everything is coding..*/ 

    return v; 
} 

/* everything is coding..*/ 

} 

Пожалуйста, советы. Спасибо.

+3

Что такое 'деятельность'? – codeMan

+0

Показать, где вы инициализируете активность. – barq

+0

ОК, подождите. Я обновляю свой вопрос. –

ответ

1

вы объявили деятельность, но вы никогда не инициализировать его, так как конструктор вашего адаптера принимает только набор данных:

public class HistoryListAdapter extends BaseAdapter { 
    private Activity activity; 
    private LayoutInflater inflater; 
    private List<User> users; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
    public HistoryListAdapter(List<User> users) { 
     this.users = users; 
    } 

с другой стороны выглядит, как вы используете свою деятельность только для получения LayoutInflater, в этом случае вы можете избежать хранения ссылки на объект активность:

public class HistoryListAdapter extends BaseAdapter { 

private LayoutInflater inflater; 
private List<User> users; 
ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 
public HistoryListAdapter(Activity activity, List<User> users) { 
    this.users = users; 
    inflater = activity.getLayoutInflater(); 
} 

и вы можете избавиться от

if (inflater == null) 
      inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

от getView.

Другое, не имеет отношения это, находится в HistoryFragment. Вы назначаете еще LayoutInflater в свой onCreateView. Структура предоставляет уже объект как параметр. Вы можете и должны использовать его

+0

обновите свой вопрос, добавив код, который вы изменили – Blackbelt

+0

Я уже обновил свой вопрос сэр. –

+0

и как вы инициализируете адаптер? – Blackbelt

0

Используйте getActivity() вместо хранения активности в переменной.

+0

Уже используется в HistoryFragment.java –

+0

Ваша 'деятельность' в HistoryListAdapter имеет значение null. попробуйте изменить его на getActivity или создать метод его установки и вызвать HistoryFragment –

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