Я новичок в разработке для Android и Java-программировании, но я решил запрограммировать приложение для питьевой игры в Android.Это приложение в основном имитирует колоду карт, игрок нажимает кнопку, чтобы взять карту, а затем на основе карты, которая была нарисована, игрок играет в пьющую игру (т.е. берет 1 напиток, принимает 2 напитка ... и т. Д.).
У меня есть основная программа в одном Java-файле, и код, который перемешивает колоду карт и помещает последовательность карт в массив в другом Java-файле.Моя проблема заключается в том, что всякий раз, когда класс из другого Java-файла (classicMode.java) вызывается из основной программы (fubar.java), моя программа на Android вылетает и выдает ошибку:
"Приложение Drinking GameFUBAR (процесс com.games.dg) неожиданно остановился. Пожалуйста, попробуйте еще раз ".
Вот код для основной программы:
package com.games.dg;
import java.util.Arrays;
import java.util.Collections;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;
import com.games.dg.classicMode;
public class fubar extends Activity
{
private Button classic;
private Button custom;
private Button help;
private Button back;
private Button showCard;
private TextView txtbox;
private int showCardClick = 0;
private classicMode newGame;
String[] cardDeck;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initControls();
}
public void initControls()
{
classic = (Button)findViewById(R.id.classicGame);
custom = (Button)findViewById(R.id.customGame);
help = (Button)findViewById(R.id.gameHelp);
// Classic Game is Selected
classic.setOnClickListener(new OnClickListener()
{
public void onClick (View v)
{
setContentView(R.layout.gamegui);
cardDeck = newGame.getCards();
// Back Button Clicked
back = (Button)findViewById(R.id.backButton);
back.setOnClickListener(new OnClickListener()
{
public void onClick (View v)
{
setContentView(R.layout.main);
initControls();
showCardClick = 0;
}
});
//start the game method here
showCard = (Button)findViewById(R.id.showCard);
txtbox = (TextView)findViewById(R.id.textBox);
showCard.setOnClickListener(new OnClickListener()
{
public void onClick (View v)
{
if (showCardClick <=51)
{
txtbox.setText(cardDeck[showCardClick]);
showCardClick++;
}
else
txtbox.setText("End of Game");
}
});
}
}
и вот код из моего другого класса, который перетасовывает колоду:
package com.games.dg;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class classicMode
{
// Variables that describe number of cards and array cards will be placed in
public int cardCount = 52;
public static int[][] cards;
// Variables that describe the rules when a certain card is drawn
public String ace = "Take 1 Drink!";
public String two = "Take 2 Drinks!!";
public String three = "Take 3 Drinks!!!";
public String four = "Questions: The Dealer must ask the group a question, everyone else must answer his question with a question of their own...";
public String five = "Take 5 Drinks!!!!!";
public String six = "I Never....: The person who draws this card must tell the group something he or she has never done, anyone in the group who did what the dealer has'nt takes a drink";
public String seven = "Thumbmaster: The person who draws this card is the Thumbmaster for the entire game. Everytime he or she puts his thumb on the table, everyone else must follow. The last person to do so takes a drink.";
public String eight = "The Categories!: The Dealer must give a category to the group, the group must then mention brands within that category. (Ex. Dealer says: Cars, brands would be honda, toyota, mazda...)";
public String nine = "Its Rhyme Time: The Dealer says a word, everyone else in the group must come up with a rhyme for that word, the loser takes a drink";
public String ten = "Everyone Drinks!";
public String jack = "Dude's Night Out: All the guys take a drink";
public String queen = "Ladies Drink for Free: All the girls take a drink";
public String king = "The Waterfall: The Dealer starts drinking, then another person, then a 3rd person and so on. The second person can not stop drinking until the first person stops, the third person cant stop until the second one stops, and so on. Pray that a heavy drinker doesnt go first!";
// Shuffles the 2D card matrix, in the matrix each number represents a card
public static void mixup()
{
int[] values = {1,2,3,4,5,6,7,8,9,10,11,12,13};
for(int i=0;i<=3;i++)
{
Collections.shuffle(Arrays.asList(values));
for(int j=0;j<=12;j++)
cards[j][i]=values[j];
}
}
//Outputs the card order as a 1D array of strings
public String[] getCards()
{
String[] card_deck = new String[52];
int k = 0;
mixup();
for(int i=0;i<=12;i++)
{
for(int j=0;j<=3;j++)
{
if(j==0)
{
card_deck[k] = Integer.toString(cards[i][j]) + "of Hearts";
k++;
}
if (j==1)
{
card_deck[k] = Integer.toString(cards[i][j]) + "of Spades";
k++;
}
if (j==2)
{
card_deck[k] = Integer.toString(cards[i][j]) + "of Clubs";
k++;
}
if (j==3)
{
card_deck[k] = Integer.toString(cards[i][j]) + "of Diamonds";
k++;
}
}
}
return card_deck;
}
}
Так, например, при вызове "cardDeck = newGame.getCards ();"или "txtbox.setText (cardDeck [showCardClick]);"сделано, программа вылетает / Кто-нибудь может мне помочь?
Заранее спасибо!
обновление, вот мой журнал того, что произошло при запуске программы:
D/HomeLoaders( 93): ----> cleared application list
I/ActivityManager( 50): Displayed activity com.games.dg/.fubar: 1360 ms (total 1360 ms)
D/KeyguardViewMediator( 50): pokeWakelock(5000)
I/ARMAssembler( 50): generated scanline__00000077:03545404_00000A04_00000000 [ 29 ipp] (51 ins) at [0x2d1320:0x2d13ec] in 4688047 ns
I/ActivityManager( 50): Start proc com.android.inputmethod.latin for service com.android.inputmethod.latin/.LatinIME: pid=235 uid=10001 gids={3003, 1015}
D/ddm-heap( 235): Got feature list request
D/dalvikvm( 235): Trying to load lib /system/lib/libjni_latinime.so 0x43758040
D/dalvikvm( 235): Added shared lib /system/lib/libjni_latinime.so 0x43758040
D/AndroidRuntime( 221): Shutting down VM
W/dalvikvm( 221): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
E/AndroidRuntime( 221): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 221): java.lang.NullPointerException
E/AndroidRuntime( 221): at com.games.dg.classicMode.mixup(classicMode.java:42)
E/AndroidRuntime( 221): at com.games.dg.classicMode.getCards(classicMode.java:52)
E/AndroidRuntime( 221): at com.games.dg.fubar$1.onClick(fubar.java:49)
E/AndroidRuntime( 221): at android.view.View.performClick(View.java:2344)
E/AndroidRuntime( 221): at android.view.View.onTouchEvent(View.java:4133)
E/AndroidRuntime( 221): at android.widget.TextView.onTouchEvent(TextView.java:6510)
E/AndroidRuntime( 221): at android.view.View.dispatchTouchEvent(View.java:3672)
E/AndroidRuntime( 221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime( 221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime( 221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime( 221): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
E/AndroidRuntime( 221): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
E/AndroidRuntime( 221): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
E/AndroidRuntime( 221): at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
E/AndroidRuntime( 221): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
E/AndroidRuntime( 221): at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
E/AndroidRuntime( 221): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 221): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 221): at android.app.ActivityThread.main(ActivityThread.java:4203)
E/AndroidRuntime( 221): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 221): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/AndroidRuntime( 221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
E/AndroidRuntime( 221): at dalvik.system.NativeStart.main(Native Method)
I/Process ( 50): Sending signal. PID: 221 SIG: 3
I/dalvikvm( 221): threadid=7: reacting to signal 3
E/dalvikvm( 221): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
I/ARMAssembler( 50): generated scanline__00000077:03515104_00000000_00000000 [ 27 ipp] (41 ins) at [0x34aa18:0x34aabc] in 572941 ns
I/ARMAssembler( 50): generated scanline__00000077:03515104_00001001_00000000 [ 64 ipp] (84 ins) at [0x34aac0:0x34ac10] in 1098617 ns
I/Process ( 221): Sending signal. PID: 221 SIG: 9
I/ActivityManager( 50): Process com.games.dg (pid 221) has died.
I/WindowManager( 50): WIN DEATH: Window{43949420 com.games.dg/com.games.dg.fubar paused=false}
W/UsageStats( 50): Unexpected resume of com.android.launcher while already resumed in com.games.dg
W/InputManagerService( 50): Got RemoteException sending setActive(false) notification to pid 221 uid 10022