不能在类中使用 Toast 函数?



>我试图显示一条消息 通过使用 Toast 函数 在不同的格式中,我提供了许多参数,例如:getBaseContext()getContext()、。getApplication()Context()但最终还是有错误,他没有成功展示信息

我的日志猫:

AndroidRuntime: FATAL EXCEPTION: main
           Process: com.example.android.login, PID: 9911
           java.lang.NullPointerException                                                                          at com.example.android.login.retrieveUserLogin$1.onResponse(retrieveUserLogin.java:76)                                                                      at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86                                                                      at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
               at android.os.Looper.loop(Looper.java:136)
               at android.app.ActivityThread.main(ActivityThread.java:5001)
               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:785)
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
               at dalvik.system.NativeStart.main(Native Method)

我的班级:

public class retrieveUserLogin {
public Activity activity;
private ProgressDialog progressDialog;
private HttpApi api;
public int value_array;
private List<Users> user;
private String UserAccount_;
private Call<HttpApi.HttpBinResponse> call;
private Call<List<Users>> getUsersCall;
private List<Integer>collection;
//   private Context context;
Context mContext;
public retrieveUserLogin(final String t1 ,final String t2){
//  context = context;
api = HttpApi.getInstance();
api.addHeader("Authorization","MyT23");
getUsersCall = api.getService().getAllChatRooms();
getUsersCall.enqueue(new retrofit.Callback<List<Users>>(){
String UserAccuent;
@Override
public void onResponse(retrofit.Response<List<Users>>response, Retrofit retrofit){
collection = new ArrayList<>();
user = response.body();
String [] arrayString = new String[user.size()];
String [] arrayString2 = new String[user.size()];
int[] arrayInt = new int[user.size()];
for(int i=0; i<response.body().size(); i++){
arrayString[i] = user.get(i).user_name;
arrayString2[i] = user.get(i).email;
arrayInt[i] =  user.get(i).password;
if(Arrays.asList(arrayString2).contains(t1)){
UserAccuent =   arrayString[i];
break;
}
}
boolean Check = Arrays.asList(arrayString2).contains(t1);
boolean Check2 = contains(arrayInt , Integer.parseInt(t2));
if(Check == true && Check2 == true){
Toast.makeText(activity.getApplication(),"تم تسجيل الدخول يا......" +UserAccuent.toString() ,Toast.LENGTH_LONG).show();
// Toast.makeText(getContext(), "sdfasd"+5, Toast.LENGTH_LONG).show();
}else{
Toast.makeText(activity.getBaseContext(),"خطأ فى اسم البريد او كلمة السر" ,Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Throwable t){
progressDialog.dismiss();
// Toast.makeText(getContext(),"XXX" ,Toast.LENGTH_LONG).show();
}});
}

public static boolean contains(int[] arr,int item) {
for (int n : arr){
if (item == n){
return true;
}
}
return false;
}

// End ;
}

//从活动调用

retrieveUserLogin("username","userpassword",Activity.this)

构造函数的更改

public retrieveUserLogin(final String t1 ,final String t2, final Context context){
mContext = context;  
Toast.makeText(mContext ,"خطأ فى اسم البريد او كلمة السر" ,Toast.LENGTH_LONG).show();}

试试这个

在您的非活动类中

public class NonActivity {
public void showToast(Context context, String message){
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}

将收缩者从public retrieveUserLogin(final String t1 ,final String t2){更改为public retrieveUserLogin(Context context, final String t1 ,final String t2){
并分配mContext=context,然后将活动实例传递给它。

不要在字段中存储活动和上下文。而是将它们作为参数传递给方法。

public void retrieveUserLogin(
final Context context, 
final String t1 ,final String t2) {
// ...
// then change your toasts to
Toast.makeText(context, "...", Toast.LENGTH_LONG).show();
}

问题可能是您没有为activity赋值,但是将上下文作为参数传递可以解决这个问题。这样,只有当您有上下文才能提供该方法时,才能调用该方法。

Toast 不显示任何消息,因为活动为 null:

Toast.makeText(activity.getApplication(),"تم تسجيل الدخول يا......" +UserAccuent.toString() ,Toast.LENGTH_LONG).show();

这也是为什么你在LogCat中看到一个NullPointerException。

您需要初始化 retrieveUserLogin 类的活动:

public Activity activity;

在类构造函数中,您可能需要通过再添加一个参数来稍微更改构造函数:

public retrieveUserLogin(Activity activity, final String t1 ,final String t2){
// init activity here
this.activity = activity;
// your code
}

最新更新