Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
Java 如何在启动另一个活动后保留变量_Java_Android_Static - Fatal编程技术网

Java 如何在启动另一个活动后保留变量

Java 如何在启动另一个活动后保留变量,java,android,static,Java,Android,Static,当我尝试访问已在以下类中初始化的列表锦标赛时: public class AdminControl extends AppCompatActivity { Firebase ref; FloatingActionButton fab; public static List <Tournament> tournaments; ListView list; Tournament [] temp; @Override protect

当我尝试访问已在以下类中初始化的列表锦标赛时:

public class AdminControl extends AppCompatActivity {

    Firebase ref;
    FloatingActionButton fab;
    public static List <Tournament> tournaments;
    ListView list;
    Tournament [] temp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_control);
        Toolbar b = (Toolbar) findViewById(R.id.toolbar);
        b.setTitle("Tournaments");
        setSupportActionBar(b);
        fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                createNewTournament(v);
            }
        });
        AdminLogin.firebase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                tournaments = (ArrayList) dataSnapshot.getValue();
                Object [] objArr = tournaments.toArray();
                temp = new Tournament[objArr.length];
                for (int i = 0; i < objArr.length; i++){
                    temp[i] = (Tournament) objArr[i];
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
        if (tournaments == null){
            tournaments = new ArrayList<Tournament>();
        }
        list = (ListView) findViewById(R.id.listView);
        ArrayAdapter<Tournament> tempAdapter = new ArrayAdapter<Tournament>(
                this, android.R.layout.simple_list_item_1, temp);
        list.setAdapter(tempAdapter);
    }

    public void createNewTournament(View v) {
        Intent newIntent = new Intent(this, TournamentCreator.class);
        startActivity(newIntent);
    }
}

也许最好使用另一个singleton类来管理锦标赛列表。最好不要混合使用视图(活动)和模型(比赛)类,因为Android中的视图类(如活动和片段)会经历几个生命周期事件,如onCreate()等。你难道不可以使用onActivityResult()返回创建的比赛吗?我没有完美的答案,但我可以说,从另一个活动引用静态变量没有什么错。如果访问该变量时出现问题,则会出现其他错误,但无论出于何种原因,该变量实际上是空的。所以您可以尝试将“Log.i(TAG,“tournaments的值为”+tournaments.toString());”放在createNewTournament方法中,以便在启动新活动之前查看该变量中的实际内容。。。根据@BooberBunz所说的,如果你要为你的
列表设置一些硬编码值,你可以在不同的活动中访问它们。尝试确保没有任何东西意外地将您的列表设置为
null
,如果这样做有效,那么您需要找出
onDataChange
无法正常工作的原因。看起来锦标赛被设置为null:)也许使用另一个单例类来管理锦标赛列表更好。最好不要混合使用视图(活动)和模型(比赛)类,因为Android中的视图类(如活动和片段)会经历几个生命周期事件,如onCreate()等。你难道不可以使用onActivityResult()返回创建的比赛吗?我没有完美的答案,但我可以说,从另一个活动引用静态变量没有什么错。如果访问该变量时出现问题,则会出现其他错误,但无论出于何种原因,该变量实际上是空的。所以您可以尝试将“Log.i(TAG,“tournaments的值为”+tournaments.toString());”放在createNewTournament方法中,以便在启动新活动之前查看该变量中的实际内容。。。根据@BooberBunz所说的,如果你要为你的
列表设置一些硬编码值,你可以在不同的活动中访问它们。尝试这样做以确保没有任何东西意外地将列表设置为
null
,如果这样做有效,那么您需要找出
onDataChange
无法正常工作的原因。看起来锦标赛设置为null:)
public class TournamentCreator extends AppCompatActivity {
    private Button b;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Object a = AdminControl.tournaments;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tournament_creator);
        b = (Button) findViewById(R.id.button3);
        b.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                beginTournament(v);
            }
        });
    }

    public void beginTournament(View v) {
        EditText text = (EditText) findViewById(R.id.editText);
        Tournament newTourn = new Tournament(text.getText().toString());
        AdminControl.tournaments.add(newTourn);
        Firebase userRef = AdminLogin.firebase.child("users").child(AdminLogin.firebase.getAuth().getUid());
        userRef.setValue(AdminControl.tournaments);
        finish();
    }
}