0

Я попытался получить активность context от FragmentonAttach() метод.Получение контекста из фрагмента - исключение NullPointerException?

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    context = activity.getApplicationContext(); 

    obj = new MySQLiteHelper(context); 
    ... 

} 

Но, я все еще получаю NullPointerException. Как мне структурировать код, чтобы избежать этого?

Вот мой фрагмент кода:

public class ListTab extends Fragment { 

    View view; 

    Context context ;  // I just created reference here 
    MySQLiteHelper obj; // and initialised in onAttach() 

    String[][] table; 
    byte[][] images; 
    Bitmap[] bitmap; 

    String[] title = new String[10]; 
    String[] init_price = new String[10]; 
    String[] cur_price = new String[10];  

    int len,i; 

    private OnFragmentInteractionListener mListener; 

    public ListTab() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    // not sure when this is called, so left this empty. 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // Inflate the layout for this fragment 

     view = inflater.inflate(R.layout.fragment_list_items, container, false); 

     obj.open(); //I'm getting an exception here - NullPointerException 
     obj.read(); 

     table = obj.getTable(); 
     images = obj.getImages(); 

     len = obj.getLength(); 

     ... 
     //some code to inflate fragment with Listview 

    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     context = activity.getApplicationContext(); 

     obj = new MySQLiteHelper(context); 
    ... 
    //some code 
    } 

... 
// some other methods    
} 

Что является причиной этой проблемы? Может ли кто-нибудь объяснить мне, пожалуйста?

+0

Всегда предоставляйте стек, если ваш вопрос включает отладку, упрощает процесс для читателей. – Marcus

+0

Проблема не в контексте. Это было с растровым массивом в моем коде. Комментирование того, что сработало. Решить эту проблему сейчас. Спасибо за ваше время. – Nikhil

ответ

0

Android предоставляет вам getActivity() фрагмент для того же сценария.

Это из документации по onAttach(). onCreate называется сразу после onAttach().

Я думаю, что если вы проверите onCreate(), вы можете использовать это вместо этого для своей цели.

Если вы внимательно читали fragment lifecycle, onActivityCreated onccurs свою деятельность после того, как onAttach(). Вам нужна активность создан, чтобы получить context.So, если возможно, вы могли бы перенести свой код на onCreate фрагмента.

+0

Да, я использовал getActivity(), но возвращает контекст только при загрузке фрагмента, иначе до этого он возвращает NULL. Я упомянул: http://stackoverflow.com/questions/8215308/using-context-in-fragment – Nikhil

+0

есть ли какая-либо конкретная причина, по которой вы хотите использовать контекст перед загрузкой фрагмента? – Droidekas

+0

Да, мне нужен контекст, поэтому я могу использовать его для создания объекта MySQLiteHelper. Мне нужно получить некоторые данные из моей базы данных и использовать эти данные для обновления моего интерфейса фрагмента i.e. listview. – Nikhil

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