我的应用程序在启动时崩溃,我不知道为什么。 Gradle构建运行正常,没有任何错误

时间:2016-05-01 17:15:53

标签: java android android-studio

我正在创建一个应用程序,现在应该保存,然后获取数字编辑文本的值。当我从string.xml加载数据时,它很好,但当我切换到SharedPreferences时,它甚至没有开始。任何帮助找到问题将不胜感激。 BTW .java在下面,我确定布局.xml没问题。

package programmingandroidapps.brightnesscustomizationapp;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.util.Log;
import android.content.SharedPreferences;
import android.content.Context;

public class MainActivity extends AppCompatActivity {

//Declarations
String brightnessValue;
int choice, brightnessValueInt;

final EditText mEditText1=(EditText)findViewById(R.id.editText1), mEditText2=(EditText)findViewById(R.id.editText2), mEditText3=(EditText)findViewById(R.id.editText3), mEditText4=(EditText)findViewById(R.id.editText4), mEditText5=(EditText)findViewById(R.id.editText5);
Button mButton1=(Button)findViewById(R.id.button1), mButton2=(Button)findViewById(R.id.button2), mButton3=(Button)findViewById(R.id.button3), mButton4=(Button)findViewById(R.id.button4), mButton5=(Button)findViewById(R.id.button5);
SharedPreferences storedBrightness1 = this.getSharedPreferences("brightv1", Context.MODE_PRIVATE), storedBrightness2 = this.getSharedPreferences("brightv2", Context.MODE_PRIVATE), storedBrightness3 = this.getSharedPreferences("brightv3", Context.MODE_PRIVATE), storedBrightness4 = this.getSharedPreferences("brightv4", Context.MODE_PRIVATE), storedBrightness5 = this.getSharedPreferences("brightv5", Context.MODE_PRIVATE);
SharedPreferences.Editor mEditor;
//

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

    //Get saved brightness values from string.xml and set them to ediText1-5
    brightnessValueInt = storedBrightness1.getInt("brightv1", 0);
    brightnessIntToString();
    printToEditText(1);

    brightnessValueInt = storedBrightness2.getInt("brightv2", 0);
    brightnessIntToString();
    printToEditText(2);

    brightnessValueInt = storedBrightness3.getInt("brightv3", 0);
    brightnessIntToString();
    printToEditText(3);

    brightnessValueInt = storedBrightness4.getInt("brightv4", 0);
    brightnessIntToString();
    printToEditText(4);

    brightnessValueInt = storedBrightness5.getInt("brightv5", 0);
    brightnessIntToString();
    printToEditText(5);
    //

    // On Click Button Listeners
    mButton1.setOnClickListener(
            new View.OnClickListener()
            {
                public void onClick(View view)
                {
                    //Validate >=0 and <=100, paint #222222 if is valid, paint red if not
                    Log.v(brightnessValue, mEditText1.getText().toString());
                    mEditor = storedBrightness1.edit();
                    mEditor.putInt("brightv1", brightnessValueInt);
                }
            });
    //
}

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

public void printToEditText(int choice)
{
    if(choice==1)
    {
        mEditText1.setText(brightnessValue, TextView.BufferType.EDITABLE);
    }
    else if(choice==2)
    {
        mEditText2.setText(brightnessValue, TextView.BufferType.EDITABLE);
    }
    else if(choice==3)
    {
        mEditText3.setText(brightnessValue, TextView.BufferType.EDITABLE);
    }
    else if(choice==4)
    {
        mEditText4.setText(brightnessValue, TextView.BufferType.EDITABLE);
    }
    else
    {
        mEditText5.setText(brightnessValue, TextView.BufferType.EDITABLE);
    }
}

public void brightnessIntToString()
{
    brightnessValue=brightnessValueInt+"";
}
}

我相信这是应用程序崩溃日志。我是Android的新手,所以如果它不仅仅是说出来,就不必生气了:P

05-01 13:24:53.061 1624-1624/programmingandroidapps.brightnesscustomizationapp D/dalvikvm: Not late-enabling CheckJNI (already on)
05-01 13:24:56.451 1624-1624/programmingandroidapps.brightnesscustomizationapp D/AndroidRuntime: Shutting down VM
05-01 13:24:56.451 1624-1624/programmingandroidapps.brightnesscustomizationapp W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb3d11b20)
05-01 13:24:56.471 1624-1624/programmingandroidapps.brightnesscustomizationapp E/AndroidRuntime:
FATAL EXCEPTION: main

Process: programmingandroidapps.brightnesscustomizationapp, PID: 1624

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{programmingandroidapps.brightnesscustomizationapp/programmingandroidapps.brightnesscustomizationapp.MainActivity}: java.lang.NullPointerException
                                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
                                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
                                                                                                 at android.app.ActivityThread.access$800(ActivityThread.java:135)
                                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                                 at android.os.Looper.loop(Looper.java:136)
                                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5001)
                                                                                                 at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                                 at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                                                                 at dalvik.system.NativeStart.main(Native Method)
                                                                                              Caused by: java.lang.NullPointerException
                                                                                                 at android.app.Activity.findViewById(Activity.java:1884)
                                                                                                 at programmingandroidapps.brightnesscustomizationapp.MainActivity.<init>(MainActivity.java:21)
                                                                                                 at java.lang.Class.newInstanceImpl(Native Method)
                                                                                                 at java.lang.Class.newInstance(Class.java:1208)
                                                                                                 at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
                                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
                                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
                                                                                                 at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                                 at android.os.Looper.loop(Looper.java:136) 
                                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5001) 
                                                                                                 at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                                 at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                                                                                                 at dalvik.system.NativeStart.main(Native Method) 

2 个答案:

答案 0 :(得分:2)

问题是,在应用布局并初始化活动(findViewById)之前,您正在调用getSharedPreferencesthis。您应该在onCreate之后将这些方法调用放在setContentView(R.layout.activity_main);

答案 1 :(得分:1)

Dejan将部分代码移入onCreate生命周期方法是正确的,具体来说,您的代码应该更改为:

package programmingandroidapps.brightnesscustomizationapp;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.util.Log;
import android.content.SharedPreferences;
import android.content.Context;

    public class MainActivity extends AppCompatActivity {

    //Declarations
    String brightnessValue;
    int choice, brightnessValueInt;

    private EditText mEditText1, mEditText2, mEditText3, mEditText4, mEditText5;
    private Button mButton1,mButton2, mButton3, mButton4, mButton5;
    private SharedPreferences storedBrightness1, storedBrightness2, storedBrightness3,storedBrightness4,storedBrightness5; 
    private SharedPreferences.Editor mEditor;
    //

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

        mButton1 =(Button)findViewById(R.id.button1); 
        mButton2=(Button)findViewById(R.id.button2); 
        mButton3=(Button)findViewById(R.id.button3); 
        mButton4=(Button)findViewById(R.id.button4); 
        mButton5=(Button)findViewById(R.id.button5);

        mEditText1 =(EditText)findViewById(R.id.editText1); 
        mEditText2=(EditText)findViewById(R.id.editText2); 
        mEditText3=(EditText)findViewById(R.id.editText3); 
        mEditText4=(EditText)findViewById(R.id.editText4); 
        mEditText5=(EditText)findViewById(R.id.editText5);

        //instead of doing this, I'd rather use "named" SharedPreferences - call it "brightness" and will carry the five values 
        //something like SharedPreferences brightnessPreferences = this.getSharedPreferences("brightness", Context.MODE_PRIVATE);
        //I ma just adding this here because that's the way you have it
        storedBrightness1 = this.getSharedPreferences("brightv1", Context.MODE_PRIVATE), 
        storedBrightness2 = this.getSharedPreferences("brightv2", Context.MODE_PRIVATE), 
        storedBrightness3 = this.getSharedPreferences("brightv3", Context.MODE_PRIVATE), 
        storedBrightness4 = this.getSharedPreferences("brightv4", Context.MODE_PRIVATE), 
        storedBrightness5 = this.getSharedPreferences("brightv5", Context.MODE_PRIVATE);

        //Get saved brightness values from string.xml and set them to ediText1-5
        brightnessValueInt = storedBrightness1.getInt("brightv1", 0);
        brightnessIntToString();
        printToEditText(1);

        brightnessValueInt = storedBrightness2.getInt("brightv2", 0);
        brightnessIntToString();
        printToEditText(2);

        brightnessValueInt = storedBrightness3.getInt("brightv3", 0);
        brightnessIntToString();
        printToEditText(3);

        brightnessValueInt = storedBrightness4.getInt("brightv4", 0);
        brightnessIntToString();
        printToEditText(4);

        brightnessValueInt = storedBrightness5.getInt("brightv5", 0);
        brightnessIntToString();
        printToEditText(5);
        //

        // On Click Button Listeners
        mButton1.setOnClickListener(
                new View.OnClickListener()
                {
                    public void onClick(View view)
                    {
                        //Validate >=0 and <=100, paint #222222 if is valid, paint red if not
                        Log.v(brightnessValue, mEditText1.getText().toString());
                        mEditor = storedBrightness1.edit();
                        mEditor.putInt("brightv1", brightnessValueInt);
                    }
                });
        //
    }

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

    public void printToEditText(int choice)
    {
        if(choice==1)
        {
            mEditText1.setText(brightnessValue, TextView.BufferType.EDITABLE);
        }
        else if(choice==2)
        {
            mEditText2.setText(brightnessValue, TextView.BufferType.EDITABLE);
        }
        else if(choice==3)
        {
            mEditText3.setText(brightnessValue, TextView.BufferType.EDITABLE);
        }
        else if(choice==4)
        {
            mEditText4.setText(brightnessValue, TextView.BufferType.EDITABLE);
        }
        else
        {
            mEditText5.setText(brightnessValue, TextView.BufferType.EDITABLE);
        }
    }

    public void brightnessIntToString()
    {
        brightnessValue=brightnessValueInt+"";
    }
}