从其他类创建对象

时间:2016-12-07 14:36:25

标签: android android-activity nullpointerexception superclass

我有一个设置屏幕,您可以在其中选择,添加和删除应用程序的配置。

添加配置时,我创建了一个inputBox类的新实例(扩展了设置活动类 - 我存储了标准android文本输入框的过程),以查询新配置的名称。

在此输入框的Onclick中,调用superClass(s​​ettings-activity)中的过程来创建新的配置对象。 此过程从活动中查询一些内容(例如,选定的微调框元素),包括seekBar的进度。

这是我获得NPE的地方:

java.lang.NullPointerException: Attempt to invoke virtual method'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference

在初始化应用程序时也会调用相同的对象创建过程,并且工作正常。

我从错误中了解到,问题是当从子类调用过程时,不再设置变量对屏幕的corrseponding元素的引用 - 因此无法查询。

所以问题:
当从另一个类调用过程时,如何查询活动元素的值?

我知道这个话题相当广泛,但我现在几天都无法解决这个问题。 感谢您的帮助。

以下是问题的方案:

public class Settings extends AppCompatActivity{
Context settingsContext = this;
private Spinner someSpinner;
//other elements
@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    someSpinner = (Spinner) findViewById(R.id.someView);
    //other elements
    addNewConfig.setOnClickListener((v) --> {
        inputBox inputBox = new inputBox("OK", "Cancel", settingsContext, "sourcePath",1,1);
        newConfigName = inputBox.show();
    });

public sSetting makeNewConfig(String name, String sourcePath, int dataFrom, int dataTo){
    sSetting newConfig;
    newConfig = new sSetting("NAME", someSpinner.getProgress()>0, ...);
    return newConfig;
}
}

和inputBox:

 public final class inputBox extends Settings {
 //someVars
 inputBox(String buttonOk, String buttonCancel, Context setContext, String sourcePath, int dataFrom, int dataTo){
     //variable setters
 }
 private String show() {
      //show msgbox
      //onclick ok
      super.makeNewConfig(....);
 }

1 个答案:

答案 0 :(得分:0)

为解决这个问题,我稍微重组了一下我的项目:
我删除了inputBox-Part,经过一些研究考虑了我需要的太复杂的解决方案 但是:我现在在我的设置视图中添加了一个editText。 虽然我不得不为此更改我的设置视图,但它现在看起来更好,编辑用户的配置名称非常容易。

我认为在大多数情况下都能解决问题。添加Popup-Box只需要更多的错误处理并使设计更复杂

我希望这会有所帮助;) 如果您需要它的代码,可在此处获取: GitHub - AIM