2013-04-18 2 views
-4

좋아, 나는 칵테일 양식 목록을 선택할 수있는 칵테일 성경 응용 프로그램을 가지고 있으며 텍스트, img 및 youtube 클립을 연결하는 버튼과 같은 칵테일에 대한 다양한 정보를 표시해야합니다. 코드는 컴파일하지만 목록에있는 항목 중 하나를 클릭하면 예상치 못한 응용 프로그램의 충돌이 발생합니다. 또한 순간에 내 애플 리케이션은 두 개의 칵테일을 허용 어떻게 20 칵테일을 실행할 수 있습니까? 그런데 대부분 수입품을 모두 제거했습니다.Android - 예기치 않은 앱 충돌

코드 목록 클래스에게 칵테일의 목록 여기

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

인 칵테일 표시 페이지의 정보를 변경

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.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(); 
      } 
     }; 
    }); 
    } 
} 

코드를 실행 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

logcat의 stacktrace가 더 도움이 될 것입니다. –

+1

마지막 줄을 채운 후 stacktrace를 게시하면 여기에 붙여 넣어졌습니다 ... – user1969053

+0

미안하지만 바뀌 었습니다. – user1323808

답변

0

내가하지해야합니다 Bloody_Mary

문에 밑줄을 왼쪽 xml 파일에서 ID가 "bYoutube"인 버튼을 확인하십시오. 그 버튼을 찾을 때처럼 보입니다. 호출은 null을 반환하므로 onClickListener를 설정할 때 앱이 다운됩니다. 사용

+0

으로 넘겨 주어야한다고 생각한다. 너는 생명의 은인이다. 문제를 찾기 위해 수 시간 동안 노력 해왔다 – user1323808

+0

목록의 항목을 클릭하면 img, text 및 youtube 클립을 어떻게 바꿀 것인지 알 수 있습니까? 또한 라인 ourIntent.putExtra ("Bloody_Mary", "Capirinha"); 오직 두 개의 문자열을 추가 할 수 있습니다 어떻게 두 개 이상의 문자열을 추가 할 수 있습니까? – user1323808

+0

우선, 의도를 잘못 사용하고 있습니다. Intent.putExtra (name, data) 호출의 첫 번째 값은 추가 할 추가 데이터의 이름입니다. 예를 들어, 귀하의 경우, "COCKTAILS"라고 부를 수 있습니다.두 번째 값은 다양한 것들이 될 수 있습니다 (Intent 문서를 확인하십시오). http://developer.android.com/reference/android/content/Intent.html하지만 귀하의 경우에는 너의 칵테일 이름. – Catherine

0

당신은 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); 

XML 파일에는 bYoutube 버튼이 없다한다.

관련 문제