如何将 getContext 传递给 Java 类不起作用? [复制]
Posted
技术标签:
【中文标题】如何将 getContext 传递给 Java 类不起作用? [复制]【英文标题】:How to pass getContext to Java class not working? [duplicate] 【发布时间】:2017-09-12 06:49:09 【问题描述】:我正在为 ProgressBar
创建通用 java 类,但出现如下错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void app.bridgecenterandstaffmanagament.com.bridgecenterandstaffmanagament.CommonClass.Singletonclass_obj.showProgressBar(android.content.Context)' on a null object reference
at app.bridgecenterandstaffmanagament.com.bridgecenterandstaffmanagament.Fragments.NotificationFragment.onCreateView(NotificationFragment.java:41)
片段
public class NotificationFragment extends Fragment
public NotificationFragment()
// Required empty public constructor
RecyclerView recyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_notification, container, false);
recyclerView = v.findViewById(R.id.recylierview_notification);
// Singletonclass_obj.getInstance().showProgressBar(getActivity());
Singletonclass_obj.getInstance().showProgressBar(getContext());
// print();
return v;
Java类
public class Singletonclass_obj extends Application
private ProgressBar progressBar;
private static Singletonclass_obj singletonclassobj;
public static Singletonclass_obj getInstance()
return singletonclassobj;
@Override
public void onCreate()
super.onCreate();
singletonclassobj = this;
public void showProgressBar(Context context)
// Toast.makeText(context, "welcometoindia", Toast.LENGTH_SHORT).show();
progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleSmall);
public void hideProgressBar()
if (progressBar !=null && progressBar.isShown())
progressBar.setVisibility(View.INVISIBLE);
我的上一个项目使用相同的代码。请帮助我。
【问题讨论】:
为什么不使用Singletonclass_obj.getInstance().showProgressBar(getActivity());
?
你的应用实现已经是单例了,没必要再弄了。
@John Joe 我试过不工作,先生。
@Iulian Popescu 我试过不工作..我的上一个项目相同的代码 wrking 先生..但是为什么不在这里工作我不知道,请告诉我我犯了什么错误
你是否在清单文件中添加了 Singletonclass_obj 为android:name=""
【参考方案1】:
根据我有问题的above comment
试试这个把你的Singletonclass_obj
添加到application tag like below code
里面的清单文件中
<application
android:name=".Singletonclass_obj"<!--add here your Singletonclass_obj class -->
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
【讨论】:
它正在工作,先生,但进度条没有显示,toast 消息正在打印。 ProgressDialog 也在显示,但 ProgressBar 没有显示。请问先生是什么问题。 ` progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge); progressBar.setVisibility(View.VISIBLE);`singletonclass 里面的先生progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge); progressBar.setVisibility(View.VISIBLE);
没有说明原因,先生
@Mariyappan 您将无法使用 ProgressBar,因为您没有要在 Singletonclass_obj
中添加的视图【参考方案2】:
问题是您没有正确初始化应用程序类。基本上,系统不知道你的类,因此它没有被创建。您需要在Manifest
的<application>
标签中添加以下内容,它将起作用:
android:name=".Singletonclass_obj"
并这样称呼它:((Singletonclass_obj)getActivity().getApplication()).showProgressBar(getContext());
但是,正如我在 cmets 中所说,您不需要将应用程序类创建为单例,因为它已经是。所以你的应用程序类会是这样的:
public class Singletonclass_obj extends Application
private ProgressBar progressBar;
@Override
public void onCreate()
super.onCreate();
public void showProgressBar(Context context)
// Toast.makeText(context, "welcometoindia", Toast.LENGTH_SHORT).show();
progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleSmall);
public void hideProgressBar()
if (progressBar !=null && progressBar.isShown())
progressBar.setVisibility(View.INVISIBLE);
即使这可以解决您关于 NPE 的问题,您也无法使用 ProgressBar
,因为您没有添加它的视图(应用程序没有视图)。
【讨论】:
谢谢先生,Toast 消息正在打印,但 ProgressBar 没有显示先生。 如何实现 ProgressBar 有什么办法先生,因为不推荐使用 Progress Dialog。以上是关于如何将 getContext 传递给 Java 类不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章