2015-11-13 2 views
-1

Я знаю, что есть много вопросов о сбое при использовании setContentView, но я не нашел никаких проблем, таких как мои.setContentView crash when activity_main -> custom

Это в основном мой первый день с использованием Android Studio. В настоящее время я слежу за курсом Android от Paulo Dichone на Udemy. Одна из первых вещей, которые он имеет у нас, это изменить исходный макет на тот, который мы делаем сами. Даже изменение менее строки приводит к тому, что моя эмулированная программа вылетает в Genymotion.

Введите код для MainActivity.java. Единственное, что я изменил с оригинала (который работает), это activity_main как аргумент setContentView (во второй строке onCreate), который я изменил на mylayout.

package welcomeandroid.myandroid.com.welcomeandroid; 

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.View; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mylayout); 
    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, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

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

XML-код для моего пользовательского макета 'mylayout' имеет следующий вид:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Please work" 
    android:id="@+id/textView2" 
    android:layout_gravity="center_horizontal" /> 

В LogCat сообщения от запуска программы заключаются в следующем:

11-12 23:28:17.584 2244-2244/? I/art: Late-enabling -Xcheck:jni 
11-12 23:28:18.026 2244-2244/welcomeandroid.myandroid.com.welcomeandroid  D/AndroidRuntime: Shutting down VM 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: FATAL EXCEPTION: main 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: Process: welcomeandroid.myandroid.com.welcomeandroid, PID: 2244 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{welcomeandroid.myandroid.com.welcomeandroid/welcomeandroid.myandroid.com.welcomeandroid.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.access$800(ActivityThread.java:151) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:135) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5254) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:100) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:93) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.internal.app.ToolbarActionBar.<init>(ToolbarActionBar.java:78) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:206) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at welcomeandroid.myandroid.com.welcomeandroid.MainActivity.onCreate(MainActivity.java:19) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.Activity.performCreate(Activity.java:5990) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.access$800(ActivityThread.java:151)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:135)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5254)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
11-12 23:28:22.531 2244-2244/welcomeandroid.myandroid.com.welcomeandroid I/Process: Sending signal. PID: 2244 SIG: 9 

Я бы очень признателен за любую помощь. Это немного обескураживает, чтобы впасть в такие проблемы, изменив лишь крошечный бит кода, который инструктировал инструктор.

+3

Ваш макет не имеет панели инструментов или FloatingActionButton, но активность по-прежнему ищет для них. Посмотрите на строку 'Caused by:' в вашем стеке. –

ответ

2

Вы должны удалить следующие строки из кода:

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, "Replace with your own action", Snackbar.LENGTH_LONG) 
       .setAction("Action", null).show(); 
    } 
}); 

, потому что у вас нет панели инструментов и FloatingActionButton включены в макете.

+0

Это сделало. Спасибо! – Theogeo

0

как майк говорит, что в вашем макете нет панели инструментов или плавающей области действия. Попробуйте XML это может помочь вам

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Please work" 
     android:id="@+id/textView2" 
     android:layout_gravity="center_horizontal" /> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
     /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.design.widget.FloatingActionButton 

     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right|bottom" 
     android:layout_marginBottom="@dimen/activity_vertical_margin" 
     android:layout_marginRight="@dimen/activity_horizontal_margin" 
     android:src="@drawable/ic_refresh_white_36dp" 
     app:borderWidth="0dp" /> 
    </LinearLayout> 

Good Luck

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