버튼 (StartButton)을 클릭하면 String 배열 (wordPick)에서 임의로 선택된 단어를 스크램블하고 A 텍스트의 텍스트를 설정하는 Mix() 메서드가 시작되는 간단한 응용 프로그램을 시작하려고합니다. 텍스트 필드 (ScambleF). 거기에서 또 다른 버튼 (EnterButton)은 편집 가능한 텍스트 필드 (EnterF)에서 읽고 EnterF 텍스트 필드에서 사용자가 입력 한 단어가 언 스크램블 된 단어와 일치하는지 확인합니다.Android Studio에서 앱을 실행할 수 없습니다. NullPointerException
불행히도 에뮬레이터에서 앱을 시작할 때 다음 오류가 계속 발생합니다. 여기에 대한 답변을 검색했지만 지금까지는 onCreate() 전에 변수를 초기화하지 않는 것이 유일한 방법입니다.
편집 : 크로노 미터가 추가되었지만 지금은 기능이 없습니다. 여기
FATAL EXCEPTION: main
Process: com.example.roland.scramblegame, PID: 19156
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.roland.scramblegame/com.example.roland.scramblegame.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' 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 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at android.content.ContextWrapper.getResources(ContextWrapper.java:87)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81)
at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:541)
at android.content.Context.getString(Context.java:409)
at com.example.roland.scramblegame.MainActivity.Fill(MainActivity.java:64)
at com.example.roland.scramblegame.MainActivity.onCreate(MainActivity.java:27)
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)
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
String []wordPick;
int track;
Button StartButton, EnterButton;
TextView ScrambleF;
EditText EnterF;
MainActivity run;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
run = new MainActivity();
wordPick = new String[16];
wordPick = run.Fill(wordPick);
StartButton = (Button)findViewById(R.id.StartB);
EnterButton = (Button)findViewById(R.id.EnterB);
StartButton.setOnClickListener(
new Button.OnClickListener() {
public void onClick(View v) {
Random rand = new Random();
track = rand.nextInt(16);
ScrambleF = (TextView)findViewById(R.id.Question);
ScrambleF.setText(run.Mix(wordPick[track]));
}
}
);
EnterButton.setOnClickListener(
new Button.OnClickListener() {
public void onClick(View v) {
EnterF = (EditText) findViewById(R.id.Answer);
if (EnterF.getText().toString().equalsIgnoreCase(wordPick[track])) {
//Correct
}
else {
//Incorrect
}
}
}
);
}
public String[] Fill (String[] array) {
//Im just going to add random words
if (array == null) {
array = wordPick;
}
array[0] = getString(R.string.W_Bottle);
array[1] = getString(R.string.W_Samurai);
array[2] = getString(R.string.W_Keyboard);
array[3] = getString(R.string.W_Shrimp);
array[4] = getString(R.string.W_Project);
array[5] = getString(R.string.W_Planet);
array[6] = getString(R.string.W_Walnut);
array[7] = getString(R.string.W_PacMan);
array[8] = getString(R.string.W_Shelter);
array[9] = getString(R.string.W_Android);
array[10] = getString(R.string.W_Toilet);
array[11] = getString(R.string.W_Numbers);
array[12] = getString(R.string.W_Anime);
array[13] = getString(R.string.W_Goldfish);
array[14] = getString(R.string.W_Phantom);
array[15] = getString(R.string.W_Jigsaw);
return array;
}
public String Mix (String str) {
//This scrambles up the words in the string array
if(str == null) {
str = wordPick[track];
}
char[] characters = str.toCharArray();
for (int i = 0; i < characters.length; i++) {
int randomIndex = (int)(Math.random() * characters.length);
char temp = characters[i];
characters[i] = characters[randomIndex];
characters[randomIndex] = temp;
}
str = String.valueOf(characters);
return str;
}
}
매니페스트
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
,369입니다
1,363,210 그리고 필요하다면 난 그냥 오류가 어쩌면 당신에 아래의 코드에서 onCreate
올 생각도
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
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="com.example.roland.scramblegame.MainActivity"
android:background="#006699">
<Chronometer
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/chronometer"
android:textSize="25sp"
android:textStyle="bold"
android:textColor="#ffffff"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="SCRAMBLED WORD"
android:id="@+id/Question"
android:enabled="false"
android:textSize="30sp"
android:textStyle="bold"
android:textColor="#FFFFFF"
android:background="#427030"
android:padding="5dp"
android:layout_above="@+id/Answer"
android:layout_centerHorizontal="true"
android:layout_marginBottom="70dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Answer"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:width="250dp"
android:background="#dddddd"
android:height="45dp"
android:clickable="false"
android:singleLine="true"
android:minHeight="35dp"
android:inputType="text" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/StartButton"
android:id="@+id/StartB"
android:layout_below="@+id/Answer"
android:layout_alignStart="@+id/Answer"
android:layout_marginTop="43dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/EnterButton"
android:id="@+id/EnterB"
android:layout_alignTop="@+id/StartB"
android:layout_alignEnd="@+id/Answer" />
</RelativeLayout>
'활동'을'new'로 인스턴스화하고 올바르게 작동시키지 못합니다. 어쨌든 왜 그렇게하려고합니까? 단지'fill()'메서드를'onCreate()'에서 직접 호출하면됩니다. 또한 Java 명명 규칙을 따라야하고 소문자로 메소드 이름을 시작해야합니다. –
가능한 [NullPointerException이란 무엇이며 어떻게 수정합니까?] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it)) –
"new를 사용하여 Activity를 인스턴스화 할 수없고 제대로 작동하지 않습니다. 왜 그 일을하려고합니까? onCreate()에서 직접 Fill() 메서드를 호출하십시오." 와우, 나는 '새로운 것'을 없앴습니다. 그리고 이제는 모두 작동합니다. 코딩과 관련해서는 전적으로 멍청한 놈일 뿐이니까요, 그래서 저렇게 멍청한 실수를 저 지르 죠. 감사!! – THEROFLBOAT