Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 有意将ArrayList.add方法从一个类广播到另一个类_Java_Android_Android Intent_Arraylist - Fatal编程技术网

Java 有意将ArrayList.add方法从一个类广播到另一个类

Java 有意将ArrayList.add方法从一个类广播到另一个类,java,android,android-intent,arraylist,Java,Android,Android Intent,Arraylist,我尝试使用Intent将文本从EditText字段广播到使用ArrayList的微调器witch 一个类看起来像: MainActivity.java public class MainActivity extends AppCompatActivity { ArrayList<String> server_name_list; ... ... spinner = (Spinner) findViewById(R.id.server_spinner);

我尝试使用
Intent
将文本从EditText字段广播到使用ArrayList的微调器witch

一个类看起来像:

MainActivity.java

public class MainActivity extends AppCompatActivity {
ArrayList<String> server_name_list;
    ...
    ...
        spinner = (Spinner) findViewById(R.id.server_spinner);
    server_name_list = getIntent().getStringArrayListExtra("server_name_list");

    server_name_list = new ArrayList<String>();

    ArrayAdapter<String> server_adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, server_name_list);

    server_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(server_adapter);
public class AddIP extends AppCompatActivity {

ArrayList<String> server_name_list;
    ...
    ...
/* Add IP Button */
    btn_add = (Button)findViewById(R.id.btn_add);
    btn_add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
    new_server_name = server_name.getText().toString();
    server_name_list.add(new_server_name);
但是如果我点击“添加IP”按钮,我的程序就会崩溃。 我做错了什么

调试时出现错误代码

11-13 15:19:27.875 7422-7422/de.kwietzorek.fulcrumwebview D/AndroidRuntime: Shutting down VM
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime: FATAL EXCEPTION: main
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime: Process: de.kwietzorek.fulcrumwebview, PID: 7422
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at de.kwietzorek.fulcrumwebview.AddIP$2.onClick(AddIP.java:49)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    11-13 15:19:27.876 7422-7422/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
编辑

MainActivity.java

public class MainActivity extends AppCompatActivity {
...
...
 ArrayList<String> server_name_list;
...
...
 @Override
    protected void onCreate(Bundle savedInstanceState) {
...
 //Spinner
        spinner = (Spinner) findViewById(R.id.server_spinner);

        server_name_list = getIntent().getStringArrayListExtra("server_name_list");

        server_name_list = new ArrayList<String>();

        ArrayAdapter<String> server_adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, server_name_list);

        server_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(server_adapter);
public类MainActivity扩展了AppCompatActivity{
...
...
ArrayList服务器名称列表;
...
...
@凌驾
创建时受保护的void(Bundle savedInstanceState){
...
//纺纱机
微调器=(微调器)findViewById(R.id.server\u微调器);
server_name_list=getIntent().getStringArrayListXTRA(“server_name_list”);
服务器名称列表=新的ArrayList();
ArrayAdapter服务器\ U适配器=新的ArrayAdapter(此,
android.R.layout.simple\u微调器\u项目、服务器\u名称\u列表);
server_adapter.setDropDownViewResource(android.R.layout.simple_微调器_下拉项);
spinner.setAdapter(服务器适配器);
AddIP.java

public class AddIP extends AppCompatActivity {

Button btn_back, btn_add;
EditText server_ip, server_name;
String new_server_ip, new_server_name;
ArrayList<String> server_name_list = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_ip);

    server_ip = (EditText)this.findViewById(R.id.edit_server_address);
    server_name = (EditText)this.findViewById(R.id.edit_server_name);

    /* Back Button */
    btn_back = (Button)findViewById(R.id.btn_back);
    btn_back.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(intent);
        }
    });

    /* Add IP Button */
    btn_add = (Button)findViewById(R.id.btn_add);
    btn_add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            /*new_server_ip = server_ip.getText().toString();
            MainActivity.server_array_ip.add(new_server_ip);*/

            new_server_name = server_name.getText().toString();

            server_name_list = new ArrayList<String>();
            server_name_list.add(new_server_name);

            Intent intent = new Intent(AddIP.this, MainActivity.class);
            intent.putStringArrayListExtra("server_name_list", server_name_list);
        }
    });
}
public类AddIP扩展了appcompative活动{
按钮btn_后退,btn_添加;
EditText服务器ip,服务器名称;
字符串new_server_ip,new_server_name;
ArrayList服务器\名称\列表=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.add_ip);
server_ip=(EditText)this.findviewbyd(R.id.edit_server_地址);
server\u name=(EditText)this.findViewById(R.id.edit\u server\u name);
/*后退按钮*/
btn_back=(按钮)findviewbyd(R.id.btn_back);
btn_back.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent Intent=新的Intent(getApplicationContext(),MainActivity.class);
星触觉(意向);
}
});
/*添加IP按钮*/
btn_add=(按钮)findViewById(R.id.btn_add);
btn_add.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
/*new_server_ip=server_ip.getText().toString();
MainActivity.server\u array\u ip.add(新的服务器\u ip)*/
new_server_name=server_name.getText().toString();
服务器名称列表=新的ArrayList();
服务器名称列表。添加(新服务器名称);
意向意向=新意向(AddIP.this,MainActivity.class);
putStringArrayListExtra(“服务器名称列表”,服务器名称列表);
}
});
}

}

AddIP.java中的
服务器名称列表
字段为空

应该是

ArrayList<String> server_name_list = new Arraylist<String>;
ArrayList服务器\名称\列表=新建ArrayList;
在类的顶部或onClick方法中

@Override
public void onClick(View view) {
    new_server_name = server_name.getText().toString();
    server_name_list = new Arraylist<String>;
    server_name_list.add(new_server_name);
@覆盖
公共void onClick(视图){
new_server_name=server_name.getText().toString();
服务器名称列表=新阵列列表;
服务器名称列表。添加(新服务器名称);
如果在主活动中,如果在
server\u name\u list=new ArrayList();
之后删除
server\u name\u list=getIntent()。getStringArrayListExtra(“server\u name\u list”);
ArrayList列表将填充包裹数据

更新:

第一次崩溃可以很容易地进行调试。当某些东西崩溃时,请始终检查日志中的堆栈跟踪。始终检查日志中对您自己代码的最后一次引用,在这种情况下,即de.kwietzorek.fulcrumwebview.AddIP$2.onClick(AddIP.java:49)。指向AddIP类中onClick方法的第49行。错误消息
java.lang.NullPointerException:尝试调用虚拟方法'boolean java.util.ArrayList.add(java.lang.Object)'在空对象引用上
表示您正在对空对象调用方法,因此无法执行。这将转换对象
服务器名称列表
,它是
java.util.ArrayList
为空,应在使用前进行初始化


第二个问题可以很容易地解决,方法是在启用调试器的情况下运行代码,并在
服务器名称列表的第一次赋值上设置断点,然后逐行遍历代码。

您应该使用OTTO事件总线将数据发送到其他活动,或者您可以创建您想要的arraylist编辑为静态,如下所示:

 public static ArrayList<String> server_name_list;

然后通知适配器你想在哪里显示列表。

为什么会崩溃?你能提供stacktrace吗?@Kevin Esche编辑了我的postCan你在AddIP类中显示服务器名称列表的初始化吗?@Nanoc我已经尝试了Aegis的解决方案。但是我的ArrayList中没有新条目确保,这是在创建一个新的空数组,你能发布吗用数据加载arraylist的位置进行编码?谢谢。现在应用程序不再崩溃。但我的arraylist中没有新条目。也许你不应该立即对答案进行否决,而应该对代码进行更好的调试。你可以看到我否决了你的Answare?我不……而且我对编码是新手,很抱歉我不能做任何事情sorry是个b当我说反对票的时候,我很生气。我立刻开始用手指指法,这是我不应该做的。我还更新了我的答案,提供了更多的信息。
 public static ArrayList<String> server_name_list;
MainActivity.server_name_list.add(new_server_name);