2017-05-16 1 views
-1

신생 Android 용입니다. 나의 새로운 응용 프로그램은 (내가 대신 가상 머신 경우 내 휴대 전화를 사용하고 있습니다) 내 휴대폰에 충돌되지만 코드는 바로 여기내 새 앱이 휴대 전화에 충돌하지만 코드에 오류가 없습니다.

05-16 17:36:52.717 28823-28823/ebin.namez I/art: Late-enabling -Xcheck:jni 
05-16 17:36:52.728 27804-27886/? I/PBSessionCacheImpl: Deleted sessionId[122284780131059156] from persistence. 
05-16 17:36:52.778 28823-28823/ebin.namez W/System: ClassLoader referenced unknown path: /data/app/ebin.namez-2/lib/arm64 
05-16 17:36:52.800 28823-28823/ebin.namez D/AndroidRuntime: Shutting down VM 
05-16 17:36:52.801 28823-28823/ebin.namez E/AndroidRuntime: FATAL EXCEPTION: main 
Process: ebin.namez, PID: 28823 
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ebin.namez/ebin.namez.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2583) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2742) 
     at android.app.ActivityThread.-wrap12(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1489) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6178) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
     at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:116) 
     at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147) 
     at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27) 
     at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:53) 
     at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:29) 
     at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:29) 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201) 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) 
     at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525) 
     at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:193) 
     at ebin.namez.MainActivity.<init>(MainActivity.java:36) 
     at java.lang.Class.newInstance(Native Method) 
     at android.app.Instrumentation.newActivity(Instrumentation.java:1079) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2573) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2742)  
     at android.app.ActivityThread.-wrap12(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1489)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:154)  
     at android.app.ActivityThread.main(ActivityThread.java:6178)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781) ` 

도와주세요하는 것은 이것은이다 MainActivity

package ebin.namez; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 


public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "nothing", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 

      } 
     }); 
    } 
    TextView op; 
    { 
     op=(TextView)findViewById(R.id.op); 
    } 
    Button button; 

    { 
     button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       op.setText("hey"); 
      } 
     }); 
    } 



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

에 코드입니다 버튼을 누를 때 "hey"를 표시하는 간단한 프로그램

+2

[NullPointerException이 무엇인가, 나는 그것을 해결 어떻게?]의 사용 가능한 복제 (HTTP ://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –

+3

'...하지만 코드가 맞습니다 ... '아니요, ** 아닙니다 * *. NPE가 생기기 때문입니다. –

+1

@Rotwang NPE가 OP의 코드에 직접적으로 포함되어 있지 않으며 다른 질문에 설명 된 방법으로는 문제를 해결하기에 충분하지 않기 때문에 정식 NPE 질문과 중복되지는 않습니다. – njzk2

답변

1

오류는 NullPointerExeception이 ebin.namez.MainActivity.<init>(MainActivity.java:36) 인 것을 나타냅니다. 그 코드는 initializer block입니다. 코드 1 : 1을 게시 한 경우 해당 라인은 op=(TextView)findViewById(R.id.op)입니다.

이 블록은 활동이 올바르게 설정되기 전에 인스턴스 작성시 실행됩니다. 액티비티는 구성 요소이며 수명주기는 onCreate으로 시작되므로 인스턴스 생성시 findViewById과 같은 구성 요소 속성 및 메서드에 액세스하는 것은 매우 나쁜 생각입니다.

public class MainActivity extends AppCompatActivity { 

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

    // Member op 
    TextView op; 

    // initializer block: executed on instance creation 
    { 
     op=(TextView)findViewById(R.id.op); // Line 36 
    } 
... 
} 

당신은 아마 지금처럼 onCreate 방법에 opbutton 동안 그 코드를 원 :

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

    // local variable op, declared final for use in anonymous class method 
    final TextView op = (TextView)findViewById(R.id.op); 

    // local variable button 
    Button button; 
    button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      op.setText("hey"); 
     } 
    }); 
} 
+0

감사합니다. –

관련 문제