【问题标题】:Passing a user entered value through the application?通过应用程序传递用户输入的值?
【发布时间】:2016-02-15 17:30:22
【问题描述】:

我想知道如何传递用户通过应用程序输入的值以及以后如何调用它。在我正在构建的主应用程序中,我需要跟踪用户名,以便在他们完成测验后,我可以将他们的分数记录在数据库中,但我似乎无法让用户名通过,所以我试图使用较小的程序来理解它。在列出的代码中,我希望获取用户在 page1 上输入的值,并能够在 page2 和 page3 上显示它。

Page1.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.G.globalvariables.Page1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Page 1"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="97dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_centerVertical="true"
        android:inputType="text"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/button"
        android:layout_alignEnd="@+id/button" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:onClick="onClick1"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

Page2.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.G.globalvariables.Page2">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:onClick="onClick2"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Page 2"
        android:id="@+id/textView3"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="134dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView4"
        android:layout_centerVertical="true"
        android:layout_alignRight="@+id/textView3"
        android:layout_alignEnd="@+id/textView3" />


</RelativeLayout>

Page3.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.G.globalvariables.Page3">





    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:onClick="onClick3"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Page 3"
        android:id="@+id/textView2"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="126dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView5"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

全球.java

package com.example.G.globalvariables;
import android.app.Application;
import android.widget.TextView;
public class Global extends Application {

    private String username;


    public String GetUsername(){
        return username;
    }

    public void SetUsername (String username){
        this.username = username;
    }

}

Page1.java

package com.example.G.globalvariables;

import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class Page1 extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_page1);


        final Global appState = ((Global)getApplicationContext());

        //puts it into a textview
        TextView viewUsername = (TextView)findViewById(R.id.editText);

        //tostrings it
        String Usernamestring = viewUsername.getText().toString();

        //should set the username for other files
        appState.SetUsername(Usernamestring);
    }





    public void onClick1(View v) {
        Intent intentStart = new Intent(this, Page2.class);
        startActivity(intentStart);
    }
}

Page2.java

package com.example.G.globalvariables;

import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

public class Page2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_page2);


        Global appState = ((Global)getApplicationContext());
        String state = appState.GetUsername();

        //puts it into a textview
        TextView UN1 = (TextView)findViewById(R.id.textView4);
        //should set the username for other files
        UN1.setText(state);
    }


    public void onClick2(View v) {
        Intent intentStart = new Intent(this, Page3.class);
        startActivity(intentStart);
    }
}

Page3.java

package com.example.G.globalvariables;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

public class Page3 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_page3);



        Global appState = ((Global)getApplicationContext());
        String state = appState.GetUsername();
        //puts it into a textview
        TextView UN2 = (TextView)findViewById(R.id.textView5);
        //should set the username for other files
        UN2.setText(state);
    }

    public void onClick3(View v) {
        Intent intentStart = new Intent(this, Page1.class);
        startActivity(intentStart);
    }


}

【问题讨论】:

    标签: java android xml


    【解决方案1】:

    不要执行final Global appState = ((Global)getApplicationContext()) 这不是恢复变量的正确方法,只需创建您的Global 类,如下所示:

    public class Global extends Application {
    
        private static Global instance;
        private String username;
    
        @Override
        public void onCreate() {
          super.onCreate();
          instance = this;
        }
    
        public static Global getInstance() {
          return instance;
        }
    
        public String GetUsername(){
            return username;
        }
    
        public void SetUsername (String username){
            this.username = username;
        }
    
    }
    

    并像这样设置您的用户名:Global.getInstance().SetUsername("yourUsername")。 您所做的问题是您尝试将Context 类型转换为Global,这不是您想要实现的。

    【讨论】:

    • 我在 onCreate 方法上遇到错误,它说“覆盖方法应该调用 super.oncreate”
    • 我在“Global.getInstance().SetUsername(Usernamestring);”这一行也遇到了错误对于空指针异常
    • 我通过更改初始化“私有静态全局实例”来修复它;到“私有静态全局实例 = new Global();”。感谢您对您的回答的帮助:)。
    • 确实,我相应地更改了代码。对不起。
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多