代码之家  ›  专栏  ›  技术社区  ›  user8281559

如何调用另一个类的方法?

  •  0
  • user8281559  · 技术社区  · 7 年前

    我有一个 showAlert my中的方法 AddImages.java 下面的类是它的实现

    //show Alert box
    public void showAlert(String title, String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setNeutralButton("Dismiss", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.show();
    }
    

    我想在我的AddCategory中使用此方法。所以我使用 操作员式跟随

    package com.example.lenovo.jdstudio;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.text.TextUtils;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.EditText;
    import android.support.v7.app.AlertDialog;
    import android.widget.Toast;
    
    
    /**
     * A simple {@link Fragment} subclass.
     */
    public class AddCategory extends Fragment {
    
        EditText mCategory;
        Button mSbtButton;
        public AddCategory() {
            // Required empty public constructor
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View v = inflater.inflate(R.layout.fragment_add_category, container, false);
    
            //initialise variable
            mCategory = (EditText) v.findViewById(R.id.edit_add_category);
            mSbtButton = (Button) v.findViewById(R.id.category_submit_button);
    
            //set clickEvent on the submit button
            mSbtButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(isValid())
                    {
                        startAdding();
                    }
                    else{
                       //Method from the AddImages.java
                        new AddImages().showAlert("Error", "Please fill all the details");   
                    }
                }
            });
    
    
            return v;
        }
    
    
        // Add categoty value to the database
        private void startAdding() {
        }
    
    
        // checks the field is empty or not
        private boolean isValid() {
            String category_value = mCategory.getText().toString().trim();
            if(!TextUtils.isEmpty(category_value)){
                return true;
            }
            return false;
        }
    
    }
    

    但它给了我如下的错误

    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: com.example.lenovo.jdstudio, PID: 20537
                      java.lang.NullPointerException
                          at android.support.v7.app.AlertDialog.resolveDialogTheme(AlertDialog.java:114)
                          at android.support.v7.app.AlertDialog$Builder.<init>(AlertDialog.java:294)
                          at com.example.lenovo.jdstudio.AddImages.showAlert(AddImages.java:168)
                          at com.example.lenovo.jdstudio.AddCategory$1.onClick(AddCategory.java:47)
                          at android.view.View.performClick(View.java:4463)
                          at android.view.View$PerformClick.run(View.java:18770)
                          at android.os.Handler.handleCallback(Handler.java:808)
                          at android.os.Handler.dispatchMessage(Handler.java:103)
                          at android.os.Looper.loop(Looper.java:193)
                          at android.app.ActivityThread.main(ActivityThread.java:5333)
                          at java.lang.reflect.Method.invokeNative(Native Method)
                          at java.lang.reflect.Method.invoke(Method.java:515)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
                          at dalvik.system.NativeStart.main(Native Method)
    Disconnected from the target VM, address: 'localhost:8604', transport: 'socket'
    

    因为我已经在扩展Fragment类,所以无法扩展 添加图像。Java语言 . 那么,正确的方法是什么呢。。请帮我把这个处理掉

    2 回复  |  直到 7 年前
        1
  •  2
  •   Ousmane D.    7 年前

    尝试通过 Context 制定你的方法 static

    public static void showAlert(Context context, String title, String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setNeutralButton("Dismiss", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.show();
    }
    

    如果你的 showAlert() 父活动中的方法

    (YouActivity)getActivity()).showAlert((getActivity(), "Title", "Message"); // pass the context
    

    如果您的 showAlert() 在其他类别中,而不是使用此

    showAlert((getActivity(), "Title", "Message"); // pass the context
    
        2
  •  -2
  •   Md.ibrahim khalil    7 年前
    ((MainActivity)getActivity()).showAlert(); 
    

    不要使用静电。这是一种非常糟糕的做法。而不是使用上述代码。