2013-04-18 5 views
-4

Итак, у меня есть приложение для коктейлей, которое позволяет вам выбрать коктейль из списка, и он должен отображать различную информацию о коктейле, таком как текст, img и кнопку, чтобы связать клип YouTube. компиляция, но когда я нажимаю на один из элементов в списке, неожиданное сбой приложения. Также на данный момент мое приложение разрешает только два коктейля, как я могу заставить его выпустить 20 коктейлей? Я, кстати, убрал, главным образом, весь импорт.Android - неожиданное крушение приложения

Код для запуска Класс списка

package com.drunktxtapp; 

import android.app.Activity; 

public class CocktailMenu extends Activity { 

    String classes[] = {"Bloody_Mary", "Capirinha", "Cosmopolitan", "Cuba_Libre", "Daiquiri", "Mai_Tai", "Manhattan", "Margarita", "Martini", "Mint_Julep", "Mojito", "Old_Fashoned", "Pina_Colada", "Screwdriver", "Singapore_Sling", "Tom_Collins", "Whiskey_Sour", "White_Russian"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.cocktail_menu); 
     Button b1 = (Button) findViewById(R.id.bByList); 
     Button b2 = (Button) findViewById(R.id.bRandomCocktail); 

     b1.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 

       try { 
        Class<?> menuClass = Class.forName("com.drunktxtapp.Menu"); 
        Intent ourIntent = new Intent(CocktailMenu.this, menuClass); 
        startActivity(ourIntent); 
       } catch (ClassNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     }); 

     b2.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 
       String cocktailType = classes[(int) (Math.random() * classes.length)]; 
       try{ 
       Class<?> ourClass = Class.forName("com.drunktxtapp." + cocktailType); 
       Intent openRandom = new Intent(CocktailMenu.this, ourClass); 
       startActivity(openRandom); 
      }catch (ClassNotFoundException e){ 
       e.printStackTrace(); 
      } 
     }; 
    }); 
    } 
} 

код, который создает список коктейлей

package com.drunktxtapp; 

import android.app.ListActivity; 


public class Menu extends ListActivity{ 

    String classes[] = {"Bloody_Mary", "Capirinha", "Cosmopolitan", "Cuba_Libre", "Daiquiri", "Mai_Tai", "Manhattan", "Margarita", "Martini", "Mint_Julep", "Mojito", "Old_Fashoned", "Pina_Colada", "Screwdriver", "Singapore_Sling", "Tom_Collins", "Whiskey_Sour", "White_Russian"}; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(Menu.this,android.R.layout.simple_list_item_1, classes)); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id);; 
      Intent ourIntent = new Intent(Menu.this, CocktailDetail.class); 
      ourIntent.putExtra("Bloody_Mary", "Capirinha"); 
      startActivity(ourIntent); 
    } 
} 

код, который изменяет информацию страницы дисплея коктейль

package com.drunktxtapp; 

import android.net.Uri; 

public class CocktailDetail extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.cocktaildetail); 
     ImageView imageView1 = (ImageView)findViewById(R.id.imageCocktail); 
     imageView1.setImageDrawable(getResources().getDrawable(R.drawable.bloodymary)); 
     Button b1 = (Button) findViewById(R.id.bYoutube); 
     TextView t1 = (TextView)findViewById(R.id.textCocktailName); 
     String cocktailName = getIntent().getStringExtra("Bloody Mary"); 
     t1.setText(cocktailName); 
     b1.setOnClickListener(new Button.OnClickListener() { 

      public void onClick(View v) { 
       startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=Alt-ehDc3fc"))); 
       } 
     }); 
    } 
} 

Вот LogCat

04-18 09:22:38.085: E/AndroidRuntime(1068):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at android.os.Looper.loop(Looper.java:137) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at android.app.ActivityThread.main(ActivityThread.java:4898) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at dalvik.system.NativeStart.main(Native Method) 
04-18 09:22:38.085: E/AndroidRuntime(1068): Caused by: java.lang.NullPointerException 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at com.drunktxtapp.CocktailDetail.onCreate(CocktailDetail.java:26) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at android.app.Activity.performCreate(Activity.java:5206) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 
04-18 09:22:38.085: E/AndroidRuntime(1068):  ... 11 more 
04-18 09:27:46.270: I/Process(1068): Sending signal. PID: 1068 SIG: 9 

XML файл

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

    <TextView 
     android:id="@+id/textCocktailName" 
     android:textStyle="bold" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Cocktail Name" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <ImageView 
     android:id="@+id/imageCocktail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:src="@drawable/bloodymary" /> 

    <TextView 
     android:textStyle="bold" 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Ingredients" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/textIngredients" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Insert txt here" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textStyle="bold" /> 

    <TextView 
     android:textStyle="bold" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginTop="2dp" 
     android:text="Preparation" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/textPrepration" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Insert txt here" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textStyle="bold" /> 

    <Button 
     android:id="@+id/buttonYoutube" 
     android:layout_width="200dp" 
     android:layout_height="75dp" 
     android:layout_gravity="center" 
     android:layout_marginTop="5dp" 
     android:text="YouTube Clip" 
     android:textSize="20dp" /> 

</LinearLayout> 
+2

stacktrace from logcat будет полезен –

+1

Опубликовать stacktrace после последней строки u, вставленной здесь ... – user1969053

+0

Извините, изменено сейчас Я совершенно новый для всего этого! – user1323808

ответ

0

Я не см. кнопку с идентификатором «bYoutube» в вашем XML-файле. Похоже, что когда вы ищете эту кнопку, вызов возвращает null, поэтому, когда вы пытаетесь установить onClickListener, ваше приложение выходит из строя.

+0

Большое вам спасибо за спасение жизни! Я пытался часами находить проблему. – user1323808

+0

Знаете ли вы, как я буду менять изображение img, text и youtube при щелчке элемента в списке. Также строка ourIntent.putExtra («Bloody_Mary», «Capirinha»); только позволяет мне добавить две строки, как я могу добавить более двух строк? – user1323808

+0

Прежде всего, вы неправильно используете намерение. Первое значение в вызове Intent.putExtra (имя, данные) - это NAME дополнительных данных, которые вы добавляете. Например, в вашем случае имеет смысл называть его «КОКТЕЙЛИ».Второе значение может быть различным (см. Документацию о намерениях) http://developer.android.com/reference/android/content/Intent.html, но в вашем случае было бы разумнее передать массив названия ваших коктейлей. – Catherine

0

Вы оставили подчеркивание в Bloody_Mary

Изложение String cocktailName = getIntent().getStringExtra("Bloody Mary"); должно быть

String cocktailName = getIntent().getStringExtra("Bloody_Mary");

и Button b1 = (Button)findViewById(R.id.buttonYoutube);

+0

Знаете ли вы, как я буду менять обрезку img, text и youtube при щелчке элемента в списке. Также строка ourIntent.putExtra («Bloody_Mary», «Capirinha»); только позволяет мне добавить две строки, как я могу добавить более двух строк? – user1323808

+0

, если вам нужно добавить другой оператор с другим ключом и значение 'ourIntent.putExtra (« Key »,« Value »);'. Я думаю, что действительно вы должны передать его как 'ourIntent.putExtra (« SomeKey », classes [position]);' –

0

Попробуйте использовать:

Button b1 = (Button) findViewById(R.id.buttonYoutube); 

Как нет bYoutube кнопки в файле XML.