0

У меня есть этот диалог, который работает, пока я не добавлю код, чтобы попытаться запустить другой диалог, а затем он сбой с ошибкой DialogFragment.class. popup.show - это ошибка.Запуск диалога из неактивного

общественного класса ProcessLocation расширяет DialogFragment {

Context context; 
SharedPreferences domainToName; 
SharedPreferences nameToDomain; 
SharedPreferences defaults; 
PopupMessage popup; 
int locationTally; 

// Constructor 
ProcessLocation(Context context) { 
    this.context = context; 
} 


public void processLocation(String domain, String name, String password) { 

     domainToName = context.getSharedPreferences("domainToName", Context.MODE_PRIVATE); //domain name = friendly name 
     nameToDomain = context.getSharedPreferences("nameToDomain", Context.MODE_PRIVATE); //friendly name = domain name/password/acm 
     defaults = context.getSharedPreferences("Defaults", Context.MODE_PRIVATE); //friendly name = domain name/password/acm 
     String checkName = nameToDomain.getString(name,null); 

     locationTally = defaults.getInt("tally",0); 
     final Editor domainEdit = domainToName.edit(); 
     final Editor nameEdit = nameToDomain.edit(); 
     //popup = new PopupMessage(); 

     // Check to see if the location friendly name exists already, if so the entry is overwritten with new data 
     if (checkName == null) { 
      locationTally++; 
      updatePreferences(locationTally, name, domain, password); 
     // popup.message = "Location has been added"; 
     // popup.show(getFragmentManager(), "PopupMsgFragment"); 
      } 
     else { 
      nameEdit.remove(name); 
      nameEdit.commit(); 
      domainEdit.remove(domain); 
      domainEdit.remove(domain+"Pw"); 
      domainEdit.commit(); 
      updatePreferences(locationTally, name, domain, password); 
     } 

    } 

public void updatePreferences(int tally, String name, String domain, String password) { 

    popup = new PopupMessage(); 

    domainToName = context.getSharedPreferences("domainToName", Context.MODE_PRIVATE); //domain name = friendly name 
    nameToDomain = context.getSharedPreferences("nameToDomain", Context.MODE_PRIVATE); //friendly name = domain name/password/acm 
    defaults = context.getSharedPreferences("Defaults", Context.MODE_PRIVATE); //friendly name = domain name/password/acm 
    final Editor domainEdit = domainToName.edit(); 
    final Editor nameEdit = nameToDomain.edit(); 
    final Editor defaultEdit = defaults.edit(); 

    String defaultLocation = defaults.getString("defaultLocation", "None Set"); 
    if(defaultLocation.equals("")) { 
     defaultEdit.putString("defaultLocation",name); 
    } 

    nameEdit.putString(name,domain); 
    nameEdit.commit(); 
    defaultEdit.putInt("tally",tally); 
    defaultEdit.commit(); 
    domainEdit.putString(domain,name); 
    domainEdit.putString(domain+"Pw",password); 
    domainEdit.commit(); 

    System.out.println("mycOutput:- Tally: " + locationTally); 
    System.out.println("mycOutput:- Domain from Name: " + nameToDomain.getString(name,"")); 
    System.out.println("mycOutput:- Name from Domain: " + domainToName.getString(domain,"")); 
    System.out.println("mycOutput:- Password: " + domainToName.getString(domain+"Pw","")); 

    popup.popupType = "info"; 
    popup.message = name + " has been added successfully"; 
    popup.show(getActivity().getFragmentManager(), "PopupMsgFragment"); 

} 

}

Класс, содержащий всплывающее меню:

public class PopupMessage extends DialogFragment { 


String message = ""; 
AddLocation addLocation; 
String popupType = ""; 

Context mContext; 

public PopupMessage() { 
    mContext = getActivity(); 
} 
// Constructor 


@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    addLocation = new AddLocation(); 

    // Use the Builder class for convenient dialog construction 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    if (popupType.equals("addloc")) { 
     builder.setMessage(message) 
      .setPositiveButton("Add Location", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        if (popupType.equals("addloc")) { 
        addLocation.show(getFragmentManager(), "PopupMsgFragment"); 
        } 
       } 
      }) 
      .setNegativeButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      // 
      }; 
      }); 
    } 
    if (popupType.equals("info")) { 
     builder.setMessage(message) 
     .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 

      } 
     }); 
    } 

    // Create the AlertDialog object and return it 
    return builder.create(); 
} 

}

Благодаря

ОШИБКА MEESSAGE (все бросает NullPointer):

enter image description here

ответ

0

Вы не предоставили класс AddLocation. Предполагая, что это другой класс, чем ProcessLocation.

В классе PopupMessage, попробуйте добавить:

Context mContext; 

public PopupMessage() { 
    mContext = getActivity(); 
} 

и в классе ProcessLocation, модифицируют следующим образом:

Заменить popup.show(getFragmentManager(), "PopupMsgFragment");

по popup.show(getActivity().getFragmentManager(), "PopupMsgFragment");

+0

@DanJamesPalmer Можете ли вы опубликовать отладочный LogCat ошибки - также, если вы можете оставить класс addLocation - поможет – Wildroid

0

ProcessLocation

final Editor nameEdit = nameToDomain.edit(); 
      popup = new PopupMessage(this); 

      // Check to see if the location friendly name exists already, if so the entry is overwritten with new data 
      if (checkName == null) { 
       nameEdit.putString(name,domain); 

PopUp

public class PopupMessage extends DialogFragment { 
    Context myContext; 
    String message = ""; 
    AddLocation addLocation; 

    public PopupMessage(Context context){ 
     this.myContext = context; 
    } 


    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     addLocation = new AddLocation(); 

     // Use the Builder class for convenient dialog construction 
     AlertDialog.Builder builder = new AlertDialog.Builder(this.myContext); 
     builder.setMessage(message) 
       .setPositiveButton("Add Location", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         addLocation.show(getFragmentManager(), "PopupMsgFragment"); 
        } 
       }) 
       .setNegativeButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       // 
      }; 
     }); 
     // Create the AlertDialog object and return it 
     return builder.create(); 
    } } 
+0

я получаю сообщение об ошибке при попытке использовать «это» в новом PopupMessage. Я изменил его на popup = new PopupMessage (getActivity()); но все равно получить нулевой указатель –

 Смежные вопросы

  • Нет связанных вопросов^_^