第一个Android应用程序崩溃,但代码中没有错误

时间:2015-10-17 06:52:43

标签: android

这是我在模拟器上运行应用程序时的日志,我是应用程序开发的新手,有人可以帮忙吗?如果需要,我会发布代码,但会分成多个活动。

10-17 08:45:43.269    2696-2696/? I/art﹕ Not late-enabling -Xcheck:jni (already on)
10-17 08:45:43.269    2696-2696/? I/art﹕ Late-enabling JIT
10-17 08:45:43.273    2696-2696/? I/art﹕ JIT created with code_cache_capacity=2MB compile_threshold=1000
10-17 08:45:43.304    2696-2696/? W/System﹕ ClassLoader referenced unknown path: /data/app/com.victorioussecrets.nwureferencegenerator-2/lib/x86
10-17 08:45:43.427    2696-2696/com.victorioussecrets.nwureferencegenerator D/AndroidRuntime﹕ Shutting down VM
10-17 08:45:43.427    2696-2696/com.victorioussecrets.nwureferencegenerator E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.victorioussecrets.nwureferencegenerator, PID: 2696
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.victorioussecrets.nwureferencegenerator/com.victorioussecrets.nwureferencegenerator.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
            at android.app.ActivityThread.-wrap11(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at com.victorioussecrets.nwureferencegenerator.MainActivity.onCreate(MainActivity.java:31)
            at android.app.Activity.performCreate(Activity.java:6237)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
            at android.app.ActivityThread.-wrap11(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
10-17 08:45:47.140    2696-2696/? I/Process﹕ Sending signal. PID: 2696 SIG: 9

我修复了空错误,现在这是以后的新日志。

10-17 09:28:23.871    3195-3195/com.victorioussecrets.nwureferencegenerator E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.victorioussecrets.nwureferencegenerator, PID: 3195
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.widget.Spinner.getSelectedItem()' on a null object reference
            at com.victorioussecrets.nwureferencegenerator.MainActivity.onItemSelected(MainActivity.java:70)
            at android.widget.AdapterView.fireOnSelected(AdapterView.java:922)
            at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:911)
            at android.widget.AdapterView.-wrap1(AdapterView.java)
            at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:881)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是我的MainActivity.java

package com.victorioussecrets.nwureferencegenerator;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;


public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {


    Spinner spinnerStyles;
    Button btnExit;

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

        btnExit = (Button)findViewById(R.id.btnExit);

        Spinner spinner = (Spinner)findViewById(R.id.spinnerStyles);
        ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.arrStyles,android.R.layout.simple_spinner_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);

        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                System.exit(0);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

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


        String spinVal = "";

        spinVal = spinnerStyles.getSelectedItem().toString();

        if(spinVal.equals("NWU Harvard")) {
            startActivity(new Intent(MainActivity.this, nwu_harvard.class));
        }
        if(spinVal.equals("LAW")) {
            startActivity(new Intent(MainActivity.this, law.class));
        }
        if(spinVal.equals("APA")) {
            startActivity(new Intent(MainActivity.this, apa.class));
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
}

当我运行应用程序并进入nwu_harvard_book.java活动时,我的最后一个错误我没有遇到崩溃或错误,但是当我尝试nwu_harvard_article.java活动时,我收到此错误。

10-17 10:35:42.499  28256-28256/com.victorioussecrets.nwureferencegenerator E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.victorioussecrets.nwureferencegenerator, PID: 28256
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
            at com.victorioussecrets.nwureferencegenerator.nwu_harvard_article$2.onClick(nwu_harvard_article.java:43)
            at android.view.View.performClick(View.java:5156)
            at android.view.View$PerformClick.run(View.java:20755)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5832)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

这是第一个nwu_harvard_book活动     包com.victorioussecrets.nwureferencegenerator;

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

public class nwu_harvard_book extends AppCompatActivity {

    Button btnBack,btnGenerate;
    String stringf= "",value1= "",value3= "",value2= "",value4= "",value5= "";
    EditText inputTxt = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nwu_harvard_book);

        btnGenerate = (Button) findViewById(R.id.btngenerate);
        btnBack = (Button) findViewById(R.id.btnBack);

        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        btnGenerate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                inputTxt = (EditText) findViewById(R.id.edtAuthor);
                value1 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtTitle);
                value2 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtDate);
                value3 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtEdition);
                value4 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtTown);
                value5 = inputTxt.getText().toString();

                stringf = (value1+". "+value3+". "+value2+". "+value4+". "+value5+".");


                Intent intent = new Intent(nwu_harvard_book.this, output.class);
                intent.putExtra("output", stringf);
                startActivity(intent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.nwu_harvard_book, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

这是第二个nwu_harvard_article活动

package com.victorioussecrets.nwureferencegenerator;

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

public class nwu_harvard_article extends AppCompatActivity {

    Button btnBack,btnGenerate;
    String stringf= "",value1= "",value3= "",value2= "",value4= "",value5= "",value6= "";
    EditText inputTxt = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nwu_harvard_book);

        btnGenerate = (Button) findViewById(R.id.btngenerate);
        btnBack = (Button) findViewById(R.id.btnBack);

        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        btnGenerate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                inputTxt = (EditText) findViewById(R.id.edtAuthor);
                value1 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtTitle);
                value2 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtDate);
                value3 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtpages);
                value4 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtmagtitle);
                value5 = inputTxt.getText().toString();
                inputTxt = (EditText) findViewById(R.id.edtVolume);
                value6 = inputTxt.getText().toString();


                stringf = (value1+". "+value3+". "+value2+" "+value5+". "+value6+".");


                Intent intent = new Intent(nwu_harvard_article.this, output.class);
                intent.putExtra("output", stringf);
                startActivity(intent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.nwu_harvard_book, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

3 个答案:

答案 0 :(得分:2)

你的按钮是空的。你必须初始化它

Button button = (Button)findViewById(R.id.your_id);

Button button = new Button(yourContext);

parent.addView(button);

答案 1 :(得分:0)

您的onCreate活动方法存在问题。你检查你的xml按钮id是否与onCreate相同。

Button button = (Button)findViewById(R.id.button1);

答案 2 :(得分:0)

在所有3场景中,您获得了NPE(NullPointerException)。
第一种情况 - 按钮视图的NPE未在MainActivity中初始化: 我认为行是btnExit.setOnClickListener(。您使用Hossein Gerami提供的解决方案解决了这个问题,并且可能添加了btnExit = (Button)findViewById(R.id.btnExit);

第二种情况 - 在MainActivity onItemSelected方法中未初始化Spinner的NPE:此行为spinVal = spinnerStyles.getSelectedItem().toString(); 您在初始化spinnerStyles或使用其他替代方法后修复了它。

第三种情况 - 带有EditText的NPE在nwu_harvard_article中为空:在这种情况下,由Logcat报告指出的行

java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.victorioussecrets.nwureferencegenerator.nwu_harvard_article$2.onClick(nwu_harvard_article.java:43)

在这种情况下,行是value4 = inputTxt.getText().toString(); 现在为什么这里inputTxt为null bcoz以上行使得inputTxt为null inputTxt = (EditText) findViewById(R.id.edtpages);这意味着布局没有具有id为R的EditText。 id.edtpages。
nwu_harvard_articlenwu_harvard_book两个活动中,您分配了相同的布局,即setContentView(R.layout.nwu_harvard_book); 所以请注意所有EditText视图的ID 。我相信你有带有ids edtAuthor, edtTitle and, edtDate的EditText。这就是为什么你没有在nwu_harvard_article中获得NPE直到value3之后才会出现问题。 所以请正确检查布局

  

建议说明:请准确理解来自here的NPE是什么。
而你呢   可以很容易地修复它,因为在logcat报告中你可以清楚地给出这个NPE的线路,这会导致应用程序崩溃。
例如:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
            at com.victorioussecrets.nwureferencegenerator.nwu_harvard_article$2.onClick(nwu_harvard_article.java:43)
  

在上面的行中你可以看到nwu_harvard_article.java:43。这是超链接线,这意味着你可以点击,如果你点击这个,它将直接带你到文件中的行,这会在你的情况下抛出错误,它将是value4 ...还有第一行说明你获得NPE的原因。

相关问题