如何将 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_objandroid: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&lt;application&gt; 标签中添加以下内容,它将起作用:

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 类不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将信息传递给java中的匿名类?

如何将字节数组从android java类传递给JNI C NDK?

如何将变量的值从java类传递到jsp页面

如何将字符串从一个类传递到另一个类[重复]

将结果集值传递给另一个类

将变量传递给main方法java