Java 烤面包片不起作用
我在片段中有一个片段,当用户输入错误的登录名和密码时,我试图调用Toast,但当按下登录按钮时,Toast不可见,并且Toast上面的日志正在调用,但Toast仍然不可见 这是我的片段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
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片段