2015-11-08 3 views
1

Я начинаю изучать разработку приложений для Android. В Android Studio gradle не было обнаружено никаких ошибок. Но показал «К сожалению, имя приложения остановилось» на моем телефоне. Я пытаюсь сделать простой EditTex для textview через приложение кнопки. Я думаю, что это легко, но явно не. По крайней мере, с этой фатальной ошибкой. Надеюсь, вы сможете помочь мне в этой ситуации. И, может быть, это вопрос.«К сожалению, имя приложения остановлено» Простое приложение

Вот LogCat

I/art: Late-enabling -Xcheck:jni 
D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
E/AndroidRuntime: Process: com.winwin.kapurs.tester1, PID: 26610 
E/AndroidRuntime: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.winwin.kapurs.tester1/com.winwin.kapurs.tester1.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference 
E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269) 
E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420) 
E/AndroidRuntime: at android.app.ActivityThread.access$900(ActivityThread.java:154) 
E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102) 
E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135) 
E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5292) 
E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372) 
E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference 
E/AndroidRuntime: at android.app.Activity.findViewById(Activity.java:2072) 
E/AndroidRuntime: at com.winwin.kapurs.tester1.MainActivity.<init>(MainActivity.java:11) 
E/AndroidRuntime: at java.lang.reflect.Constructor.newInstance(Native Method) 
E/AndroidRuntime: at java.lang.Class.newInstance(Class.java:1606) 
E/AndroidRuntime: at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 
E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2259) 
E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420)  
E/AndroidRuntime: at android.app.ActivityThread.access$900(ActivityThread.java:154)  
E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)  
E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)  
E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135)  
E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5292)  
E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)  
E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372) 

Вот мой основной код:

public class MainActivity extends AppCompatActivity { 

    final EditText mess = (EditText) findViewById(R.id.editText); 
    final TextView txt = (TextView) findViewById(R.id.textView); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     } 

    public void onClick(View v) { 
     if (txt.getText().toString().equals("")) { 
      String editTextValue = mess.getText().toString(); 
      txt.setText(editTextValue); 
     } else { 
      txt.setText(""); 
      mess.setText(""); 
     } 
    } 
} 

ответ

0

Вы можете сделать это следующим образом: (переменный не должны быть final)

1

Переместить эту инициализацию (держать объявление переменного)

final EditText mess = (EditText) findViewById(R.id.editText); 
final TextView txt = (TextView) findViewById(R.id.textView); 

в onCreate() так, что она не будет NPE из-за того, что окно активности еще не инициализировано, а после setContentView() что возвращаемое значение может быть не нулевым.

+0

Ну, я переехал эти инициализации в "OnCreate(), но затем получил 4 ошибки для неизвестных переменного в 'onClick (View v)' –

+0

Конечно, сохраните объявление переменной на уровне класса, но инициализируйте в 'onCreate()' – laalto

Смежные вопросы