2013-04-06 1 views
0

방법에서 개체를 볼 수 있도록 에이?자바 내가 방법</p> <p>A를 가지고

이미 공개했습니다. || 최종적인 물건 그러나 그것은 내가 생각하는 바른 길이 아니었다. 당신의 도움이 두 가지 방법

public void onWindowFocusChanged(boolean hasFocus){ 
    if (hasFocus){ 
     final String teststring= new String ("blubblub"); 
    } 
} 


public void a() { 
    System.out.println(teststring); 
} 

오류 로그 방법 밖에 MediaPlayer를 퍼팅의

전체 코드에 대한

들으.

04-06 05:20:25.140: E/AndroidRuntime(12120): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{~.MainActivity}: java.lang.NullPointerException 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1803) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1919) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.app.ActivityThread.access$1500(ActivityThread.java:160) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1008) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.os.Handler.dispatchMessage(Handler.java:130) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.os.Looper.loop(SourceFile:351) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.app.ActivityThread.main(ActivityThread.java:4070) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at java.lang.reflect.Method.invoke(Method.java:538) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:906) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:664) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at dalvik.system.NativeStart.main(Native Method) 
04-06 05:20:25.140: E/AndroidRuntime(12120): Caused by: java.lang.NullPointerException 
04-06 05:20:25.140: E/AndroidRuntime(12120): at android.media.MediaPlayer.create(MediaPlayer.java:697) 
04-06 05:20:25.140: E/AndroidRuntime(12120): at~.MainActivity.<init>(MainActivity.java:79) 

라인 (79)은 : 개인 MediaPlayer를 mediaPlayerW = MediaPlayer.create (getApplicationContext() R.raw.soft); 이 라인 79의 주위에

이다 : 그것은 getBaseContext 함께 할 수있는 STH를 가질 수있는 가능한

button3 = (Button)findViewById(R.id.button3); 
     button3.setOnClickListener(this); } 


private MediaPlayer mediaPlayerW = MediaPlayer.create(getApplicationContext(), R.raw.soft); 
public void onWindowFocusChanged(boolean hasFocus) 

인가?

답변

3

에 괄호의 비트에 'TestString에'에서 'testring을'변경 : TestString에 "이 클래스에"선언되는 동안

public void onWindowFocusChanged(boolean hasFocus){ 
    if (hasFocus){ 
     final String teststring= new String ("blubblub"); 
    } 
}  

public void a() { 
    System.out.println(teststring); 
} 

는 실제로 클래스의 onWindowFocusChanged 메소드 내부에서 선언되며이를 통해 해당 메소드 내부에서만 볼 수 있습니다. 클래스 전체에 그것을 볼 수 있도록하기 위해, 메소드 또는 생성자에서 클래스가 아닌 선언

public class MyClass { 
    // variable below declared *in* the class 
    // and is visible throughout the class 
    private String testString = ""; 
    private String anotherVariable; // declared but not instantiated 


public void onWindowFocusChanged(boolean hasFocus){ 
    if (hasFocus){ 
     // don't redeclare the variable here, and don't use new String(...) 
     // final String teststring= new String ("blubblub"); 

     anotherVariable = "blubblub"; // instantiated here 
    } 
} 


    public void someMethod() { 
     // variable is now visible inside of all non-static methods 
     System.out.println(testString); 
    } 

} 

는 또한, 당신은 불필요한 객체의 가능성이 비효율적 생성을 일으킬 수 있기 때문에 String myString = new String("Foo");을 사용하지 않도록합니다. 대신 String myString = "foo";을 사용하십시오. String 풀에서 문자열을 사용할 수있는 경우이를 다시 사용합니다.

+0

감사합니다. 지금까지 고맙습니다. ~ 30 분 전에이 방법을 시도했습니다. 안타깝게도 안드로이드 MediaPlayer 물건은 메서드 내에서 실행되어야합니다 (모든 것을 올바르게 이해 한 경우) – user2161301

+0

@ user2161301 : 변수가 클래스에 선언되어있는 한 계속 메소드 내에서 실행할 수 있습니다. 이것이 당신을 위해 작동하지 않았다면, 당신은이 시도와 그것이 야기한 모든 문제점을 보여주고 싶을 것입니다. –

+0

첫 번째 게시물에 "new"로그를 넣습니다. – user2161301

1

오타가 있습니다.

간단하게이 코드에서 B

+0

아야. 나는 그것을 놓쳤다. 1 + –

+0

그건 아니 었어, 난 그냥 구문 분석하는 동안 오류가 발생했습니다. 여전히 오류가 있습니다 – user2161301

+2

라인 b가 라인 A와 동일한 ** 메소드 **에 있으면, (편집 된) 코드가 작동해야합니다. – mcalex

관련 문제