2016-07-29 8 views
0

버튼 (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> 
+0

'활동'을'new'로 인스턴스화하고 올바르게 작동시키지 못합니다. 어쨌든 왜 그렇게하려고합니까? 단지'fill()'메서드를'onCreate()'에서 직접 호출하면됩니다. 또한 Java 명명 규칙을 따라야하고 소문자로 메소드 이름을 시작해야합니다. –

+0

가능한 [NullPointerException이란 무엇이며 어떻게 수정합니까?] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it)) –

+1

"new를 사용하여 Activity를 인스턴스화 할 수없고 제대로 작동하지 않습니다. 왜 그 일을하려고합니까? onCreate()에서 직접 Fill() 메서드를 호출하십시오." 와우, 나는 '새로운 것'을 없앴습니다. 그리고 이제는 모두 작동합니다. 코딩과 관련해서는 전적으로 멍청한 놈일 뿐이니까요, 그래서 저렇게 멍청한 실수를 저 지르 죠. 감사!! – THEROFLBOAT

답변

1

여기 activity_main.xml을 떠날거야 :

run = new MainActivity(); 
wordPick = new String[16]; 
wordPick = run.Fill(wordPick); 

가 있습니까 당신은 new Activity()에 의해 활동을 만들어야합니까? 좀 이상하고 추천하지 않습니다.

wordPick = Fill(new String[16]); 

어쩌면이 도움이 될 수 있습니다

함께 세 줄을 교체하려고합니다.

+0

아니요 ... 새로운 활동을 만들 필요가 없습니다. 이 시점에서 OS에 의해 관리되지 않습니다. –

1

새로운 MainActivity 변수를 초기화하지 마십시오. 이것은 필요하지 않으며 앱 충돌의 원인 인 것 같습니다.

관련 문제