1

当我尝试在模拟器上运行我的应用程序时,我从 LogCat 收到很多错误。环顾四周后,我认为我的主要错误是 NullPointerException 错误,我认为它来自从源调用用户名数组并将它们与表单上发布的用户名进行比较。

package com.example.myapplication;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity {

Context context = getApplicationContext();

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

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

public void hitSubmit(View button){
    final Spinner feedbackSpinner = (Spinner) findViewById(R.id.SpinnerFeedbackType);
    String feedbackType = feedbackSpinner.getSelectedItem().toString();
    if(feedbackType.equals("Please Select")){
        Toast.makeText(this, "Please select a country.", Toast.LENGTH_SHORT).show();
        return;
    }
    final EditText fnField = (EditText) findViewById(R.id.FN);
    String FN = fnField.getText().toString();
    if(FN.equals("")){
        Toast.makeText(this, "Please enter your first name.", Toast.LENGTH_SHORT).show();
        return;
    }
    final EditText lnField = (EditText) findViewById(R.id.LN);
    String LN = lnField.getText().toString();
    if(LN.equals("")){
        Toast.makeText(this, "Please enter your last name.", Toast.LENGTH_SHORT).show();
        return;
    }
    final EditText phoneField = (EditText) findViewById(R.id.PN);
    String PN = phoneField.getText().toString();
    if(PN.equals("")){
        Toast.makeText(this, "Please enter your phone number.", Toast.LENGTH_SHORT).show();
        return;
    }
    final EditText Email1Field = (EditText) findViewById(R.id.EA);
    String EA1 = Email1Field.getText().toString();
    if(EA1.equals("")){
        Toast.makeText(this, "Please enter an email address.", Toast.LENGTH_SHORT).show();
        return;
    }
    final EditText Email2Field = (EditText) findViewById(R.id.EA2);
    String EA2 = Email2Field.getText().toString();
    if(!EA2.equals(EA1)){
        Toast.makeText(this, "Your email address' do not match", Toast.LENGTH_SHORT).show();
        return;
    }
    final EditText userField = (EditText) findViewById(R.id.User);
    String user = userField.getText().toString();
    if(!user.equals("")){
        Toast.makeText(this, "Please enter a username", Toast.LENGTH_SHORT).show();
        return;
    }
    Resources res = getResources();
    String[] usernameArray = res.getStringArray(R.array.usernames);
    int userint = usernameArray.length;
    for(int x=0;x<userint;x++){
        if(user.equals(usernameArray[x])){
            Toast.makeText(this, "Username already exists.", Toast.LENGTH_SHORT).show();
            return;
        }
    }
    RadioButton rb1, rb2;
    rb1 = (RadioButton) findViewById(R.id.button1);
    rb2 = (RadioButton) findViewById(R.id.button2);
    if(!rb1.isChecked() && !rb2.isChecked()){
        Toast.makeText(this, "Please select a gender.", Toast.LENGTH_SHORT).show();
        return;
    }
    finish();

}

public void hitClear(View button){
    finish();
    startActivity(getIntent());
}

}

--xml代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Homework 1</string>
    <string name="FN">First Name</string>
    <string name="LN">Last Name</string>
    <string name="PN">Phone Number</string>
    <string name="EA">Email Address</string>
    <string name="REEA">Re-enter Email</string>
    <string name="User">Username</string>
    <string name="Pw">Password</string>
    <string name="Gender">Gender</string>
    <string name="Country">Country</string>
    <string name="action_settings">.</string>
    <string name="clear">Clear</string>
    <string name="submit">Submit</string>
    <string name="female">Female</string>
    <string name="male">Male</string>
    <string name="country_prompt">Choose a country</string>
    <string name="countrytype1">Malaysia</string>
    <string name="countrytype2">United States</string>
    <string name="countrytype3">Indonesia</string>
    <string name="countrytype4">France</string>
    <string name="countrytype5">Italy</string>
    <string name="countrytype6">Singapore</string>
    <string name="countrytype7">New Zealand</string>
    <string name="countrytype8">India</string>
    <string-array name="country_arrays">
        <item>Please Select</item>
        <item>Malaysia</item>
        <item>United States</item>
        <item>Indonesia</item>
        <item>France</item>
        <item>Italy</item>
        <item>Singapore</item>
        <item>New Zealand</item>
        <item>India</item>
    </string-array>
    <string-array name="usernames">
        <item>Bryan</item>
        <item>John</item>
        <item>Matt</item>
        <item>Mike</item>
    </string-array>

</resources>

谢谢。

编辑:添加activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/FN"
        android:layout_width="fill_parent"
        android:layout_height="49dp"
        android:hint="@string/FN"
        android:inputType="textCapWords"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/LN"
        android:layout_width="fill_parent"
        android:layout_height="49dp"
        android:hint="@string/LN"
        android:inputType="textCapWords"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/PN"
        android:layout_width="fill_parent"
        android:layout_height="49dp"
        android:hint="@string/PN"
        android:inputType="phone"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/EA"
        android:layout_width="fill_parent"
        android:layout_height="49dp"
        android:inputType="textEmailAddress"
        android:hint="@string/EA"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/EA2"
        android:layout_width="fill_parent"
        android:inputType="textEmailAddress"
        android:layout_height="49dp"
        android:hint="@string/REEA"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/User"
        android:layout_width="fill_parent"
        android:layout_height="49dp"
        android:hint="@string/User"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/Pw"
        android:layout_width="fill_parent"
        android:layout_height="49dp"
        android:hint="@string/Pw"
        android:inputType="textPassword"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <RadioGroup 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <RadioButton
                android:id="@+id/radioButton1"
                android:layout_width="wrap_content"
                android:layout_height="53dp"
                android:layout_weight="1.00"
                android:onClick="onRadioButtonClicked"
                android:text="@string/female" />

            <RadioButton
                android:id="@+id/radioButton2"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1.00"
                android:onClick="onRadioButtonClicked"
                android:text="@string/male" />
    </RadioGroup>

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textView9"
        android:layout_width="0dip"
        android:layout_height="49dp"
        android:layout_weight="1"
        android:text="@string/Country"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <Spinner
        android:id="@+id/SpinnerFeedbackType"
        android:layout_width="210dp"
        android:layout_height="41dp"
        android:entries="@array/country_arrays"
        android:prompt="@string/country_prompt" />

    </LinearLayout>

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

        <Button
            android:id="@+id/button1"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"   
            android:onClick="hitSubmit"         
            android:text="@string/clear" />

        <Button
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_weight="2"
            android:layout_height="wrap_content"   
            android:onClick="hitClear"         
            android:text="@string/submit" />

    </LinearLayout>


</LinearLayout>
4

3 回答 3

1

你不使用Context context = getApplicationContext(); 在您活动的第一行。这是错的。如果你需要获取上下文,你可以使用它自己。

只需使用thisthis.getBaseContext()

此外,如果您检查了错误消息,它会向您显示发生错误的特殊行。前任。在 com.example.test.MyActivity.(MyActivity.java: 47 )显示第 47 行

于 2013-09-11T02:57:15.040 回答
0

加入所有评论,也可以移行

context = getApplicationContext();

到 onCreate 方法,

Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = getApplicationContext();
}
于 2013-09-11T04:16:35.270 回答
0

第一个为什么在活动中需要 getapplication() 上下文,如果你可以使用"this" 或 MainActivity.class。如果想使用Context context = getApplicationContext(); 然后把它放在 Oncreate() 中,因为它可能包含空值,并且在任何使用的地方都可能导致空点异常。但请记住要使用哪个/如何/在哪里上下文。上下文对象取决于它最初来自哪里。

下表列出了应用程序将接收 Context 的常见位置,以及在每种情况下它的用途 **哪个/如何/在哪里**

有关上下文的详细信息,请查看什么是上下文

于 2013-09-11T03:26:25.453 回答