首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓:在创建intent之后,我在从MainActivity打开UI时遇到问题

安卓:在创建intent之后,我在从MainActivity打开UI时遇到问题
EN

Stack Overflow用户
提问于 2018-07-18 07:12:20
回答 1查看 52关注 0票数 0

在创建Intent methods.My应用程序崩溃后,当我从我的MainActivity中选择SelectPLayer和SelectPLayer2活动时,我在从MainActivity访问我的UI时遇到问题。让可点击的ListViews转到GameEmulator中指定的TextView时也遇到了问题。

代码语言:javascript
复制
//MainActivity.java


        //Class to select player 1
        public class SelectPlayer extends Activity {


            //Public static array list with adapter to crete the array and reference for listview being sent by intent from AddPLayer class
            public static ArrayList<String> list = new ArrayList<>();
            public static ArrayAdapter<String> adapter;
            ListView selectView;
            TextView title;

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

                //Identify selectview ListView
                selectView = findViewById(R.id.selectview) ;
                selectView.setClickable(true);
                selectView.setVisibility(View.VISIBLE);

                //Using adapter for ListView menu
                adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
                selectView.setAdapter(adapter);
                selectView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        String item =(String) parent.getItemAtPosition(position); // finding the item which has been clicked by the user
                        Intent intent = new Intent(SelectPlayer.this, GameEmulator.class); //starting an intent to call GameEmulator Activity
                        intent.putExtra(GameEmulator.value, item);// Putting the value clicked by user in intent
                        startActivity(intent); // starting GameEmulator Activity
                    }
                });
                //Using intent to retrieve string from AddPlayer Activity
                    Intent i = getIntent();
                    String data = i.getExtras().getString("text_key");
                    list.add(data);
                    changeList();
            }
            public static void changeList()
            {

                adapter.notifyDataSetChanged();
            }
        }

//Addplayer.java

import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.os.Bundle;
import android.widget.Button;
import android.content.Intent;

//Addplayer class to add players using intent to separate activities
public class AddPlayer extends Activity{

    //Declare buttons and edittext
    Button listButtonplayer1;
    Button listButtonplayer2;
    EditText playerIn;

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


        //Identify buttons and editext
        playerIn = (EditText) findViewById(R.id.inputname);

        listButtonplayer1 = (Button)findViewById(R.id.addbutton);
        listButtonplayer1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Using intent to send input to SelectPLayer Class
                Intent i = new Intent(AddPlayer.this,SelectPlayer.class);

                //Using string text_key to get and send string through intent
                i.putExtra("text_key", playerIn.getText().toString());


                //Start intent activity
                startActivity(i);
            }
        });

        //Second button I am trying to use for SelectPLayer2 activity only.
        listButtonplayer2 = (Button)findViewById(R.id.addbutton2);
        listButtonplayer2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Using intent to send input to SelectPLayer2 Class
                Intent in = new Intent(AddPlayer.this, SelectPlayer2.class);

                in.putExtra("text_key", playerIn.getText().toString());

                startActivity(in);
            }
        });
    }
}
Selectplayer1.java
//Class to select player 1
public class SelectPlayer extends Activity {


    //Public static array list with adapter to crete the array and reference for listview being sent by intent from AddPLayer class
    public static ArrayList<String> list = new ArrayList<>();
    public static ArrayAdapter<String> adapter;
    ListView selectView;
    TextView title;

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

        //Identify selectview ListView
        selectView = findViewById(R.id.selectview) ;
        selectView.setClickable(true);
        selectView.setVisibility(View.VISIBLE);

        //Using adapter for ListView menu
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
        selectView.setAdapter(adapter);
        selectView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String item =(String) parent.getItemAtPosition(position); // finding the item which has been clicked by the user
                Intent intent = new Intent(SelectPlayer.this, GameEmulator.class); //starting an intent to call GameEmulator Activity
                intent.putExtra(GameEmulator.value, item);// Putting the value clicked by user in intent
                startActivity(intent); // starting GameEmulator Activity
            }
        });
        //Using intent to retrieve string from AddPlayer Activity
            Intent i = getIntent();
            String data = i.getExtras().getString("text_key");
            list.add(data);
            changeList();
    }
    public static void changeList()
    {

        adapter.notifyDataSetChanged();
    }
}
//Selectplayer2.java

//Class to select player 2
public class SelectPlayer2 extends Activity {

    //Public static array list with adapter to crete the array and reference for listview being sent by intent from AddPLayer class
    public static ArrayList<String> list1 = new ArrayList<>();
    public static ArrayAdapter<String> adapter1;

    ListView selectView2;

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

        selectView2 = (ListView) findViewById(R.id.selectview1);
        selectView2.setClickable(true);
        selectView2.setVisibility(View.VISIBLE);

        //Using adapter for ListView menu
        adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list1);
        selectView2.setAdapter(adapter1);
        selectView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    String item =(String) parent.getItemAtPosition(position); // finding the item which has been clicked by the user
                    Intent in = new Intent(SelectPlayer2.this, GameEmulator.class); //starting an intent to call GameEmulator Activity
                    in.putExtra(GameEmulator.value, item);// Putting the value clicked by user in intent
                    startActivity(in); // starting GameEmulator Activity
            }
        });

        //Using intent to retrieve string from AddPlayer Activity
        Intent in = getIntent();
        String data = in.getExtras().getString("text_key");
        list1.add(data);
        changeList();
    }
    public static void changeList()
    {

        adapter1.notifyDataSetChanged();
    }
}

我有单独的静态数组列表,但在GameEmulator类中的两个文本视图上仍然显示列表视图的可点击对象。以下是我尝试单击SelectPLayer UI按钮时的错误日志:

代码语言:javascript
复制
07-17 23:41:37.296 13468-13468/com.example.ryan_.ryansplayersapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ryan_.ryansplayersapp, PID: 13468
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ryan_.ryansplayersapp/com.example.ryan_.ryansplayersapp.SelectPlayer}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
        at com.example.ryan_.ryansplayersapp.SelectPlayer.onCreate(SelectPlayer.java:47)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 07:48:03

代码语言:javascript
复制
 String data = i.getExtras().getString("text_key");

您的getExtras()返回null。确保你正确地初始化了你的意图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51391389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档