何时在android中实例化Context?

时间:2017-07-25 01:36:44

标签: android

我的Android应用程序中有一个Dashboard Activity,而我的应用程序也包含一个DBHelper类。我注意到如果我试图在Dashboard Activity中实例化DBHelper(这是初始活动),它就不起作用。它告诉我上下文为空并给我一个nullpointerexception。

但是,在第一个活动之外实例化DBHelper时不会发生此问题。为什么是这样?上下文在某种程度上没有在android的初始活动中实例化吗?

编辑:想补充一点,我试图在活动的onCreate方法中初始化上下文,但这无济于事。

这是仪表板片段:

package azynias.study.Fragments;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import azynias.study.Activities.FrontActivity;
import azynias.study.DataHandlers.TierDBHandler;
import azynias.study.R;


public class FrontFragment extends Fragment {
    private TextView progItemsDue;
    private TextView progTitle;

    private TierDBHandler tierDBHandler = TierDBHandler.getInstance(this.getActivity().getApplicationContext());

    private void init(View view) {
        progTitle = (TextView) view.findViewById(R.id.title_progress_dashb_frag);
        progItemsDue = (TextView) view.findViewById(R.id.items_overdue_dashb_frag);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_front, container, false);
    }


    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        init(view);
        initProgCard();
    }

    public void initProgCard() {
        int due = 5;

        progTitle.setText("PROGRESS");
        progItemsDue.setText(due + " items are due today.");
    }

    public FrontFragment() {

    }
}

仪表板的活动:

package azynias.study.Activities;

import android.content.Context;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import azynias.study.DataHandlers.TierDBHandler;
import azynias.study.Fragments.FrontFragment;
import azynias.study.R;

public class FrontActivity extends AppCompatActivity {

    private static Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_front);

        mContext = this.getApplicationContext();

        FrontFragment frontFrag = new FrontFragment();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.dashboard_material_frag, frontFrag);

        ft.commit();
    }

    public static Context getContext() {
        //  return instance.getApplicationContext();
        return mContext;
    }
}

2 个答案:

答案 0 :(得分:1)

事实证明,如果我想获得对上下文的引用,则必须在片段附加到活动时。当时没有有效的参考资料来解释错误。

以下是在我的片段中修复它的代码:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        tierDBHandler = TierDBHandler.getInstance(getActivity());
    }

似乎更多地阅读活动和片段的生命周期会对此有所帮助。

答案 1 :(得分:0)

您是否尝试在Dashboardactivity中使用getApplicationContext()?它又回归了什么?

一旦应用程序启动,Context就会被初始化。即在application.oncreate()方法之前。所以我认为上下文的原因是null可能会有所不同。