Android ImageUpload按钮不工作

Android ImageUpload按钮不工作,android,Android,以下是我为具有选项卡式片段的概要文件活动编写的代码: PROFILE_ACTIVITY.java 这是我的片段: public class fupload extends Fragment implements View.OnClickListener{ FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fra

以下是我为具有选项卡式片段的概要文件活动编写的代码:

PROFILE_ACTIVITY.java

这是我的片段:

    public class fupload extends Fragment implements View.OnClickListener{

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        // TODO: Rename parameter arguments, choose names that match
        // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
        private static final String ARG_PARAM1 = "param1";
        private static final String ARG_PARAM2 = "param2";
        Activity activity;

        // TODO: Rename and change types of parameters
        private String mParam1;
        private String mParam2;
        private StorageReference mstorage;

        private OnFragmentInteractionListener mListener;

        public fupload() {
            // Required empty public constructor
            activity = getActivity();
        }

        /**
         * Use this factory method to create a new instance of
         * this fragment using the provided parameters.
         *
         * @param param1 Parameter 1.
         * @param param2 Parameter 2.
         * @return A new instance of fragment fupload.
         */
        // TODO: Rename and change types and number of parameters
        public static fupload newInstance(String param1, String param2) {
            fupload fragment = new fupload();
            Bundle args = new Bundle();
            args.putString(ARG_PARAM1, param1);
            args.putString(ARG_PARAM2, param2);
            fragment.setArguments(args);
            return fragment;
        }


        private static final int GALLERY_INTENT = 2;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (getArguments() != null) {
                mParam1 = getArguments().getString(ARG_PARAM1);
                mParam2 = getArguments().getString(ARG_PARAM2);
            }
             mstorage = FirebaseStorage.getInstance().getReference();
             Button buttons = (Button) getView().findViewById(button1);
             buttons.setOnClickListener(this);


        }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_fupload, container, false);
        mstorage = FirebaseStorage.getInstance().getReference();
        Button buttons = (Button) getView().findViewById(button1);
        buttons.setOnClickListener(this);
        onClick(view);
        return view;
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("images/*");
        startActivityForResult(intent, GALLERY_INTENT);

    }

    public void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode,resultCode, data);

        if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){
            Uri uri =data.getData();
            StorageReference filepath = mstorage.child("photos").child(uri.getLastPathSegment());
            filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Toast.makeText(getActivity(), "upload done", Toast.LENGTH_LONG).show();
                }
            });
        }
    }

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}
public类fupload扩展片段实现View.OnClickListener{
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction();
//TODO:重命名参数参数,选择匹配的名称
//片段初始化参数,例如ARG_ITEM_NUMBER
私有静态最终字符串ARG_PARAM1=“PARAM1”;
私有静态最终字符串ARG_PARAM2=“PARAM2”;
活动;
//TODO:重命名和更改参数类型
私有字符串mParam1;
私有字符串mParam2;
私有存储器;参考存储器;
私有OnFragmentInteractionListener mListener;
公共fupload(){
//必需的空公共构造函数
activity=getActivity();
}
/**
*使用此工厂方法创建的新实例
*使用提供的参数创建此片段。
*
*@param param1参数1。
*@param param2参数2。
*@return一个fragment fupload的新实例。
*/
//TODO:重命名和更改参数的类型和数量
公共静态fupload newInstance(字符串param1,字符串param2){
fupload片段=新的fupload();
Bundle args=新Bundle();
args.putString(ARG_PARAM1,PARAM1);
args.putString(ARG_PARAM2,PARAM2);
fragment.setArguments(args);
返回片段;
}
专用静态最终int画廊\u意图=2;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
如果(getArguments()!=null){
mParam1=getArguments().getString(ARG_PARAM1);
mParam2=getArguments().getString(ARG_PARAM2);
}
mstorage=FirebaseStorage.getInstance().getReference();
按钮按钮=(按钮)getView().findViewById(按钮1);
按钮。setOnClickListener(此);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u fupload,容器,假);
mstorage=FirebaseStorage.getInstance().getReference();
按钮按钮=(按钮)getView().findViewById(按钮1);
按钮。setOnClickListener(此);
onClick(视图);
返回视图;
}
//TODO:重命名方法、更新参数并将方法挂接到UI事件中
public void onButtonPressed(Uri){
if(mListener!=null){
onFragmentInteraction(uri);
}
}
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
if(OnFragmentInteractionListener的上下文实例){
mListener=(OnFragmentInteractionListener)上下文;
}否则{
抛出新的RuntimeException(context.toString()
+“必须实现OnFragmentInteractionListener”);
}
}
@凌驾
公共无效连接(){
super.onDetach();
mListener=null;
}
@凌驾
公共void onClick(视图v){
意向意向=新意向(意向、行动和选择);
intent.setType(“images/*”);
startActivityForResult(意向、画廊意向);
}
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==GALLERY\u INTENT&&resultCode==RESULT\u OK){
Uri=data.getData();
StorageReference文件路径=mstorage.child(“照片”).child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
Toast.makeText(getActivity(),“上载完成”,Toast.LENGTH_LONG.show();
}
});
}
}
/**
*此接口必须由包含以下内容的活动实现
*片段,以允许通信此片段中的交互
*该活动以及其中可能包含的其他片段
*活动。
*
*有关更多信息,请参阅Android培训课程。
*/
FragmentInteractionListener上的公共接口{
//TODO:更新参数类型和名称
void onFragmentInteraction(Uri);
}
}
onclick上载图像不工作。当我单击按钮时,什么也没有发生。

1)全局声明按钮

Button button;
2) 删除onCreate()并修改onCreateView(),如下所示:

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_fupload, container,   false);

        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
         mstorage = FirebaseStorage.getInstance().getReference();
         buttons = (Button) view.findViewById(button1);
         buttons.setOnClickListener(this);
         return view;
 }
3) 修改onClick方法,如下所示:

@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.button1:
            Toast.makeText(getActivity(), "Button is working!", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("images/*");
            startActivityForResult(intent, GALLERY_INTENT);
            break;
    }
}

希望这有帮助。

agarwal您的问题解决了吗?没有。碎片活动dosent侦听onclick侦听器…您能告诉我一个链接吗dat有正确的代码,带有碎片中的按钮…或github…谢谢您尝试了我的解决方案吗?顺便问一下,为什么在片段中使用onCreate()?请解释。我尝试了许多在线链接…我之所以使用它,是因为getview提供了nullpointexception警告。如果还没有解决,您可以应用我编辑的答案。告诉我祝酒词是否至少显示了。
@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.button1:
            Toast.makeText(getActivity(), "Button is working!", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("images/*");
            startActivityForResult(intent, GALLERY_INTENT);
            break;
    }
}