java - 应用程序因 Intent 方法而崩溃

标签 java android android-intent

每次当我尝试使用intent方法时,我的应用程序都会崩溃。

MainActivity.java

package de.kwietzorek.fulcrumwebview;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    String selected;
    Spinner spinner;
    WebView myWebView;

    /* Menu */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.add_server:
                Intent intent = new Intent(this, AddIP.class);
                this.startActivity(intent);
                return true;
            case R.id.menu_refresh:
                myWebView.reload();
                return true;
            default:
                return true;
        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {

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

        //WebView
        myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new WebC());
        WebSettings webSettings = myWebView.getSettings();

        //JavaScript enable
        webSettings.setJavaScriptEnabled(true);

        //Server name spinner
        ArrayList<String> server_name_list = getIntent().getStringArrayListExtra(
                "int_new_server_name");

        spinner = (Spinner) findViewById(R.id.server_spinner);

        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);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

                selected = parent.getItemAtPosition(pos).toString();

                myWebView.loadUrl(selected);
            }

            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    //WebVie Client
        public class WebC extends WebViewClient {

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);

        }
    }
}

AddIP.java

package de.kwietzorek.fulcrumwebview;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.ArrayList;


public class AddIP extends AppCompatActivity {

    Button btn_back, btn_add;
    EditText server_ip, server_name;
    String new_server_ip, new_server_name;

    @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);*/

                ArrayList<String> server_name_list = new ArrayList<String>();

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

                Intent intent = new Intent(AddIP.this, MainActivity.class);
                intent.putStringArrayListExtra("int_server_name_list", server_name_list);
            }
        });
    }
}

错误

    11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime: FATAL EXCEPTION: main
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime: Process: de.kwietzorek.fulcrumwebview, PID: 4035
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{de.kwietzorek.fulcrumwebview/de.kwietzorek.fulcrumwebview.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.-wrap11(ActivityThread.java)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:  Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:337)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.widget.AbsSpinner.setAdapter(AbsSpinner.java:115)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.widget.Spinner.setAdapter(Spinner.java:508)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.support.v7.widget.AppCompatSpinner.setAdapter(AppCompatSpinner.java:383)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at de.kwietzorek.fulcrumwebview.MainActivity.onCreate(MainActivity.java:75)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:6237)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
11-13 22:13:49.542 4035-4035/de.kwietzorek.fulcrumwebview E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

最佳答案

查看MainActivity

    //Server name spinner
    ArrayList<String> server_name_list = getIntent().getStringArrayListExtra(
            "int_new_server_name");

并在AddIP

    intent.putStringArrayListExtra("int_server_name_list", server_name_list);

您的 key (名称)不同,因此您试图获取不存在的东西,这就是抛出 NullPointerException 的原因。


您的MainActivity的代码

package de.kwietzorek.fulcrumwebview;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    String selected;
    Spinner spinner;
    WebView myWebView;

    /* Menu */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.add_server:
                Intent intent = new Intent(this, AddIP.class);
                this.startActivity(intent);
                return true;
            case R.id.menu_refresh:
                myWebView.reload();
                return true;
            default:
                return true;
        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {

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

        //WebView
        myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new WebC());
        WebSettings webSettings = myWebView.getSettings();

        //JavaScript enable
        webSettings.setJavaScriptEnabled(true);

        //Server name spinner
        ArrayList<String> server_name_list = getIntent().getStringArrayListExtra(
                "int_new_server_name");

        if (server_name_list != null) {

        spinner = (Spinner) findViewById(R.id.server_spinner);

        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);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

                selected = parent.getItemAtPosition(pos).toString();

                myWebView.loadUrl(selected);
            }

            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
        }
    }

    //WebVie Client
        public class WebC extends WebViewClient {

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);

        }
    }
}

关于java - 应用程序因 Intent 方法而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33701815/

相关文章:

java - 如何从Intent接收文件路径

java - Android 无法向我的服务器发送发布请求时遇到问题

java - 无法使用eclipse打开android模拟器

java - 简单文本文件未正确解析

Android 谷歌地图无法在罗盘处于 Activity 状态时缩放

java - ListView 到字符串数组

java - 如何停止在 CollapsingToolbarLayout 上滚动,使其不会完全折叠

android-intent - 点击通知只打开最后一个(最后收到)

用于棋盘的 Java 2D 数组无法正常工作

java - Android - Firebase onChild添加了如何监听所有 child