我的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;
}
}
答案 0 :(得分:1)
事实证明,如果我想获得对上下文的引用,则必须在片段附加到活动时。当时没有有效的参考资料来解释错误。
以下是在我的片段中修复它的代码:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
tierDBHandler = TierDBHandler.getInstance(getActivity());
}
似乎更多地阅读活动和片段的生命周期会对此有所帮助。
答案 1 :(得分:0)
您是否尝试在Dashboardactivity中使用getApplicationContext()?它又回归了什么?
一旦应用程序启动,Context就会被初始化。即在application.oncreate()方法之前。所以我认为上下文的原因是null可能会有所不同。