Java 烤面包片不起作用

Java 烤面包片不起作用,java,android,android-fragments,android-activity,android-toast,Java,Android,Android Fragments,Android Activity,Android Toast,我在片段中有一个片段,当用户输入错误的登录名和密码时,我试图调用Toast,但当按下登录按钮时,Toast不可见,并且Toast上面的日志正在调用,但Toast仍然不可见 这是我的片段 public class Login_Fragment extends Fragment { EditText LoginUname,LoginPass; ImageButton SignIn; Context context; public static final Stri

我在片段中有一个片段,当用户输入错误的登录名和密码时,我试图调用Toast,但当按下登录按钮时,Toast不可见,并且Toast上面的日志正在调用,但Toast仍然不可见

这是我的片段

public class Login_Fragment extends Fragment {

    EditText LoginUname,LoginPass;
    ImageButton SignIn;
    Context context;
    public static final String TAG="Login Fragment";


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view= inflater.inflate(R.layout.login_fragment,container,false);
        LoginUname= (EditText) view.findViewById(R.id.Login_Box);
        LoginPass= (EditText) view.findViewById(R.id.Pass_Box);
        SignIn= (ImageButton) view.findViewById(R.id.LoginButton);

        SignIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String Phone=LoginUname.getText().toString();
                String Password=LoginPass.getText().toString();

                new AsyncTask(){
                    @Override
                    protected void onPostExecute(String result) {
                        super.onPostExecute(result);
                        Log.d("LOGIN FRAGMENT","Result: "+result); //GETTING RESULT FAIL HERE

                        if (result.equals("FAIL")){
                            Log.d("LOGIN FRAGMENT","Result is FAIL"); //THIS LOG SHOWING IN LOGCAT BUT TOAST IS NOT VISIBLE 
                            Toast.makeText(getActivity(), "Invalid Login And Password", Toast.LENGTH_LONG).show();

                        }
                        else if (result.equals("SUCCESS")){
                            Log.d("LOGIN FRAGMENT","Result is Success");

                        }

                    }
                }.execute();
                Log.d("LOGIN FRAGMENT","----LOGIN AND PASSWORD SENT");

            }
        });
        Registration.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Registration_Fragment registrationFragment=new Registration_Fragment();
                FragmentManager fragmentManager=getFragmentManager();
                FragmentTransaction transaction=fragmentManager.beginTransaction();
                transaction.replace(R.id.FragmentLoginRegistration,registrationFragment);
                transaction.commit();
            }
        });

        return view;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context=context;
    }
}
日志

08-23 14:04:38.115 29053-29053/com.boysjoys.com.pro_working1 D/LOGIN FRAGMENT: Result: FAIL
08-23 14:04:38.115 29053-29053/com.boysjoys.com.pro_working1 D/LOGIN FRAGMENT: Result is FAIL
我已经试过了

Toast.makeText(getActivity(), "Invalid Login And Password", Toast.LENGTH_LONG).show();


Toast.makeText(getActivity().getApplicationContext(), "Invalid Login And Password", Toast.LENGTH_LONG).show();


Toast.makeText(Login_Fragment.this.getActivity(), "Invalid Login And Password", Toast.LENGTH_LONG).show();
几乎所有我可以用来显示toast可见的方法,最后我尝试了
runOnUiThread
,但它仍然没有显示出来

编辑1:添加日志以显示我从服务器收到响应-“失败”

编辑2:我尝试了我得到的每个答案,但我的吐司仍然没有出现。那么我的清单布局是否有可能阻止吐司出现?如果是,请让我知道,这样我将更新我问题中的布局、样式和清单

getActivity()如果在onAttach(活动)之前运行,将返回null。相反,您应该在onPreExecute和onPostExecute方法中直接调用getActivity(),或者在onAttach中获取对它的引用:

public void onAttach (Activity attachedActivity) {
    activity = attachedActivity;
}
如果在onAttach(活动)之前运行,则getActivity()将返回null。相反,您应该在onPreExecute和onPostExecute方法中直接调用getActivity(),或者在onAttach中获取对它的引用:

public void onAttach (Activity attachedActivity) {
    activity = attachedActivity;
}

在“最后”或“应用程序内”活动中添加此方法,并在需要其工作的位置调用

public void showToast(@NonNull String msg) {
    Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
}

在“最后”或“应用程序内”活动中添加此方法,并在需要其工作的位置调用

public void showToast(@NonNull String msg) {
    Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
}

您可以通过以下代码实现Toast

Toast.makeText(view.getContext(), "Invalid Login Or Password",    Toast.LENGTH_LONG).show();

您可以通过以下代码实现Toast

Toast.makeText(view.getContext(), "Invalid Login Or Password",    Toast.LENGTH_LONG).show();

事实上,你的代码对我来说很好。我已经在doInBackground中硬编码了登录失败,因此它应该进入onPostExecute()登录失败块。这是密码

 new AsyncTask(){
                @Override
                protected Object doInBackground(Object[] params) {
                    return "FAIL"; // Hardcoded to make login fail
                }

                @Override
            protected void onPostExecute(Object result) {
                super.onPostExecute(result);
                Log.d("LOGIN FRAGMENT","Result: "+result);

                if (result.equals("FAIL")){
                    Log.d("LOGIN FRAGMENT","Result is FAIL");
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.d("LOGIN FRAGMENT","Result is FAIL 2");
                            Toast.makeText(getActivity(), "Invalid Login Or Password toast", Toast.LENGTH_LONG).show();
                        }
                    });

                }
                else if (result.equals("SUCCESS")){
                    Log.d("LOGIN FRAGMENT","Result is Success");

                }

            }
        }.execute();

事实上,你的代码对我来说很好。我已经在doInBackground中硬编码了登录失败,因此它应该进入onPostExecute()登录失败块。这是密码

 new AsyncTask(){
                @Override
                protected Object doInBackground(Object[] params) {
                    return "FAIL"; // Hardcoded to make login fail
                }

                @Override
            protected void onPostExecute(Object result) {
                super.onPostExecute(result);
                Log.d("LOGIN FRAGMENT","Result: "+result);

                if (result.equals("FAIL")){
                    Log.d("LOGIN FRAGMENT","Result is FAIL");
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.d("LOGIN FRAGMENT","Result is FAIL 2");
                            Toast.makeText(getActivity(), "Invalid Login Or Password toast", Toast.LENGTH_LONG).show();
                        }
                    });

                }
                else if (result.equals("SUCCESS")){
                    Log.d("LOGIN FRAGMENT","Result is Success");

                }

            }
        }.execute();

您应该在UI线程上调用show Toast,因此只需这样做:

SignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String Phone=LoginUname.getText().toString();
            String Password=LoginPass.getText().toString();

            new AsyncTask(){
                @Override
                protected void onPostExecute(String result) {
                    super.onPostExecute(result);
                    Log.d("LOGIN FRAGMENT","Result: "+result); //GETTING RESULT FAIL HERE

                    if (result.equals("FAIL")){
                        Log.d("LOGIN FRAGMENT","Result is FAIL"); //THIS LOG SHOWING IN LOGCAT BUT TOAST IS NOT VISIBLE 
                        new Handler(Looper.getMainLooper()).post(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(getActivity(), "Invalid Login And Password", Toast.LENGTH_LONG).show();
                            }
                        });

                    }
                    else if (result.equals("SUCCESS")){
                        Log.d("LOGIN FRAGMENT","Result is Success");

                    }

                }
            }.execute();
            Log.d("LOGIN FRAGMENT","----LOGIN AND PASSWORD SENT");

        }
    });

您应该在UI线程上调用show Toast,因此只需这样做:

SignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String Phone=LoginUname.getText().toString();
            String Password=LoginPass.getText().toString();

            new AsyncTask(){
                @Override
                protected void onPostExecute(String result) {
                    super.onPostExecute(result);
                    Log.d("LOGIN FRAGMENT","Result: "+result); //GETTING RESULT FAIL HERE

                    if (result.equals("FAIL")){
                        Log.d("LOGIN FRAGMENT","Result is FAIL"); //THIS LOG SHOWING IN LOGCAT BUT TOAST IS NOT VISIBLE 
                        new Handler(Looper.getMainLooper()).post(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(getActivity(), "Invalid Login And Password", Toast.LENGTH_LONG).show();
                            }
                        });

                    }
                    else if (result.equals("SUCCESS")){
                        Log.d("LOGIN FRAGMENT","Result is Success");

                    }

                }
            }.execute();
            Log.d("LOGIN FRAGMENT","----LOGIN AND PASSWORD SENT");

        }
    });

我建议您像这样接受Asynctask调用

public class Login_Fragment extends Fragment {

EditText LoginUname,LoginPass;
ImageButton SignIn;
Context context;
public static final String TAG="Login Fragment";


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view= inflater.inflate(R.layout.login_fragment,container,false);
    LoginUname= (EditText) view.findViewById(R.id.Login_Box);
    LoginPass= (EditText) view.findViewById(R.id.Pass_Box);
    SignIn= (ImageButton) view.findViewById(R.id.LoginButton);
 SignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String Phone=LoginUname.getText().toString();
            String Password=LoginPass.getText().toString();

              new Asynctask(Phone,Password).execute();

        }
    });

  Registration.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Registration_Fragment registrationFragment=new    Registration_Fragment();
            FragmentManager fragmentManager=getFragmentManager();
            FragmentTransaction    transaction=fragmentManager.beginTransaction();
              transaction.replace(R.id.FragmentLoginRegistration,registrationFragment);
            transaction.commit();
        }
    });

    return view;
 }

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    this.context=context;
}




 private class Asynctask extends AsyncTask<String, Integer, String> {


 String password,phone;

        public Asynctask(String phone, String password) {
            password=password;
            phone=phone;

        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected String doInBackground(String... params)
        {

       // you need to take doInbackground to return result
            return "SUCCESS";
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

          Log.d("LOGIN FRAGMENT","Result: "+result);

            if (result.equals("FAIL")){
                Log.d("LOGIN FRAGMENT","Result is FAIL");
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d("LOGIN FRAGMENT","Result is FAIL 2");
                        Toast.makeText(getActivity(), "Invalid Login Or Password toast", Toast.LENGTH_LONG).show();
                    }
                });

            }
            else if (result.equals("SUCCESS")){
                Log.d("LOGIN FRAGMENT","Result is Success");

            }


        }
    }

 }
公共类登录\u片段扩展片段{
EditText LoginName、LoginPass;
图像按钮符号;
语境;
公共静态最终字符串TAG=“Login Fragment”;
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.login\u片段,容器,false);
LoginUname=(EditText)view.findViewById(R.id.Login\u框);
LoginPass=(EditText)view.findViewById(R.id.Pass\u框);
SignIn=(ImageButton)view.findViewById(R.id.LoginButton);
SignIn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串Phone=LoginUname.getText().toString();
字符串密码=LoginPass.getText().toString();
新建异步任务(电话、密码)。执行();
}
});
Registration.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Registration_Fragment registrationFragment=新注册_Fragment();
FragmentManager FragmentManager=getFragmentManager();
FragmentTransaction=fragmentManager.beginTransaction();
事务。替换(R.id.FragmentLoginRegistration,registrationFragment);
commit();
}
});
返回视图;
}
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
this.context=context;
}
私有类Asynctask扩展了Asynctask{
字符串密码,电话;
公用异步任务(字符串电话、字符串密码){
密码=密码;
电话=电话;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…参数)
{
//您需要使用doInbackground来返回结果
返回“成功”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
Log.d(“登录片段”,“结果:+Result”);
如果(结果等于(“失败”)){
Log.d(“登录片段”,“结果为失败”);
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
Log.d(“登录片段”,“结果为失败2”);
Toast.makeText(getActivity(),“无效登录或密码Toast”,Toast.LENGTH_LONG.show();
}
});
}
else if(result.equals(“SUCCESS”)){
Log.d(“登录片段”,“结果是成功”);
}
}
}
}

我建议您像这样接受Asynctask调用

public class Login_Fragment extends Fragment {

EditText LoginUname,LoginPass;
ImageButton SignIn;
Context context;
public static final String TAG="Login Fragment";


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view= inflater.inflate(R.layout.login_fragment,container,false);
    LoginUname= (EditText) view.findViewById(R.id.Login_Box);
    LoginPass= (EditText) view.findViewById(R.id.Pass_Box);
    SignIn= (ImageButton) view.findViewById(R.id.LoginButton);
 SignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String Phone=LoginUname.getText().toString();
            String Password=LoginPass.getText().toString();

              new Asynctask(Phone,Password).execute();

        }
    });

  Registration.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Registration_Fragment registrationFragment=new    Registration_Fragment();
            FragmentManager fragmentManager=getFragmentManager();
            FragmentTransaction    transaction=fragmentManager.beginTransaction();
              transaction.replace(R.id.FragmentLoginRegistration,registrationFragment);
            transaction.commit();
        }
    });

    return view;
 }

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    this.context=context;
}




 private class Asynctask extends AsyncTask<String, Integer, String> {


 String password,phone;

        public Asynctask(String phone, String password) {
            password=password;
            phone=phone;

        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected String doInBackground(String... params)
        {

       // you need to take doInbackground to return result
            return "SUCCESS";
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

          Log.d("LOGIN FRAGMENT","Result: "+result);

            if (result.equals("FAIL")){
                Log.d("LOGIN FRAGMENT","Result is FAIL");
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d("LOGIN FRAGMENT","Result is FAIL 2");
                        Toast.makeText(getActivity(), "Invalid Login Or Password toast", Toast.LENGTH_LONG).show();
                    }
                });

            }
            else if (result.equals("SUCCESS")){
                Log.d("LOGIN FRAGMENT","Result is Success");

            }


        }
    }

 }
公共类登录\u片段扩展片段{
EditText LoginName、LoginPass;
图像按钮符号;
语境;
公共静态最终字符串TAG=“Login Fragment”;
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.login\u片段,容器,false);
LoginUname=(EditText)view.findViewById(R.id.Login\u框);
LoginPass=(EditText)view.findViewById(R.id.Pass\u框);
SignIn=(ImageButton)view.findViewById(R.id.LoginButton);
SignIn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串Phone=LoginUname.getText().toString();
字符串密码=LoginPass.getText().toString();
新建异步任务(电话、密码)。执行();
}
});
Registration.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
注册\u片段注册片段=新注册\u片段