Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 理解并修复类之间的实例处理_Android_Android Activity_Arraylist_Android Context - Fatal编程技术网

Android 理解并修复类之间的实例处理

Android 理解并修复类之间的实例处理,android,android-activity,arraylist,android-context,Android,Android Activity,Arraylist,Android Context,我在应用程序崩溃时遇到问题,出现nullpoint异常。 我知道它在尝试从pictureTalkFragment获取ArrayList时崩溃。在该类中,仅设置为PictureTalkFragment; 换句话说,我试图从一个类而不是该类的实例中获取一个元素(在ptf中为arraylist提供getter/setter,并将arraylist作为备选方案公开) 但我只是想告诉noob如何正确处理在类之间获取实例的问题(活动-->fragments和back等)。在Java中,我通常只是在构造函数中

我在应用程序崩溃时遇到问题,出现nullpoint异常。 我知道它在尝试从pictureTalkFragment获取ArrayList时崩溃。在该类中,仅设置为PictureTalkFragment; 换句话说,我试图从一个类而不是该类的实例中获取一个元素(在ptf中为arraylist提供getter/setter,并将arraylist作为备选方案公开)

但我只是想告诉noob如何正确处理在类之间获取实例的问题(活动-->fragments和back等)。在Java中,我通常只是在构造函数中有一个引用,在创建新类时发送实例/引用。但在安卓系统中,存在着所有这些onCreate(getActivity,getContext++),我很困惑:P何时使用户在何处以及如何使用:(

EditPicture是从GridViewAdapter中的此代码启动的,该代码是从PictureTalkFragment(在onlongclicklistener中编辑)扩展而来的

编辑图片类

public class EditPicture extends Activity {

private EditText text;
private Button applyBtn;
private ArrayList<PictureItem> piArray;
private PictureItem pi;
private UUID itemID;
private PictureTalkFragment ptf;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    itemID = (UUID) getIntent().getSerializableExtra("itemUUID");
    SetLocalArray(ptf.getArray());  //Nullpoint here, and i know why. But not how to get the allready created instance of this class
    getPictureItem();
    setContentView(R.layout.picturetalk_edit_pic);
    text = (EditText) findViewById(R.id.editName);
    text.setText(pi.getTitle());
    applyBtn = (Button) findViewById(R.id.applyChangeBtn);
    applyBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            updatePictureItem();
            ptf.setArray(piArray);
        }
    });


}

private void updatePictureItem() {

    pi.setTitle(text.toString());
    piArray.add(pi);
    ptf.setArray(piArray);

}

private void SetLocalArray(ArrayList<PictureItem> array) {
    this.piArray = array;
}

private PictureItem getPictureItem() {
    pi = new PictureItem("", "");

    for (int i = 0; i < piArray.size(); i++) {
        if (itemID.equals(piArray.get(i))) {
            pi = piArray.get(i);
            piArray.remove(i);

        }

    }
    return pi;
}}
public类EditPicture扩展活动{
私人编辑文本;
专用按钮applyBtn;
私人ArrayList piArray;
私人图片项目pi;
私有UUID-itemID;
私密图片;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
itemID=(UUID)getIntent().getSerializableExtra(“itemUUID”);
SetLocalArray(ptf.getArray());//此处为null点,我知道原因。但不知道如何获取该类的allready创建实例
getPictureItem();
setContentView(R.layout.picturetalk\u edit\u pic);
text=(EditText)findViewById(R.id.editName);
text.setText(pi.getTitle());
applyBtn=(按钮)findViewById(R.id.applyChangeBtn);
applyBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
updateItem();
ptf.setArray(piArray);
}
});
}
私有void updateItem(){
pi.setTitle(text.toString());
piArray.add(pi);
ptf.setArray(piArray);
}
私有void SetLocalArray(ArrayList数组){
this.piArray=数组;
}
私有PictureItem getPictureItem(){
pi=新图片项(“,”);
对于(int i=0;i
我不知道您使用阵列的目的是什么。 通常,您不应该依赖片段来获取信息,如果您想向活动传递一个对象数组,您应该使用活动附加中的Bundle来完成,而不是只传递UUID,只传递您需要的数组


如果您想使用惰性选项,只需创建一个带有静态变量的类来存储片段并在活动中使用它,我不建议这样做。

我不太明白问题出在哪里,最好是发布stacktrace及其标识问题的行。除了Picture talk停止工作外,我没有收到任何崩溃错误。没有输出ut在调试器/logcat等上。当我通过代码中断自己时,它在SetLocalArray(ptf.getArray()上崩溃;在EditPicture类中。我猜我试图从一个类中而不是从这个类的实例中获取一些东西。我将向noob发送消息,以了解如何获取PictureTalkFragment的实例。您尚未实例化该片段,请将“ptf=new PictureTalkFragment()'在SetLocalArra之前的一行中,我认为您没有正确地使用片段,但是您现在应该会得到一个不同的错误。这就是我的观点,在从片段实例启动所有EditPicture之后,该片段会更早地实例化。设置ptf=new PictureTalkFragment将只返回空片段,而不是初始insta我在如何使ptf成为PictureTalkFragment实例的引用方面遇到了问题,而不是一个新的/未实例化的PictureTalkFragment,但它没有实例化,就我所见……您创建变量“private PictureTalkFragment ptf;”,然后在创建时,尝试访问它,无论如何都不实例化e、 是的,我知道片段只用于显示位,但在我意识到这一点之前,我花了20多个类,我只是试着通过这里和那里的脏补丁一点一点地解决它:P UUID只是为了让我知道gridview中的哪个对象被按下,以便我可以在下一个活动中操作它(EditPicture).这是我的第一个应用程序,我明天早上就要发布了,希望能作为一个学校项目(迟到才能重新开始正确的工作)。将来肯定会更干净更正确:)
public class EditPicture extends Activity {

private EditText text;
private Button applyBtn;
private ArrayList<PictureItem> piArray;
private PictureItem pi;
private UUID itemID;
private PictureTalkFragment ptf;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    itemID = (UUID) getIntent().getSerializableExtra("itemUUID");
    SetLocalArray(ptf.getArray());  //Nullpoint here, and i know why. But not how to get the allready created instance of this class
    getPictureItem();
    setContentView(R.layout.picturetalk_edit_pic);
    text = (EditText) findViewById(R.id.editName);
    text.setText(pi.getTitle());
    applyBtn = (Button) findViewById(R.id.applyChangeBtn);
    applyBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            updatePictureItem();
            ptf.setArray(piArray);
        }
    });


}

private void updatePictureItem() {

    pi.setTitle(text.toString());
    piArray.add(pi);
    ptf.setArray(piArray);

}

private void SetLocalArray(ArrayList<PictureItem> array) {
    this.piArray = array;
}

private PictureItem getPictureItem() {
    pi = new PictureItem("", "");

    for (int i = 0; i < piArray.size(); i++) {
        if (itemID.equals(piArray.get(i))) {
            pi = piArray.get(i);
            piArray.remove(i);

        }

    }
    return pi;
}}