Friday 7 June 2019

java - "Unfortunately 'app' has stopped" error

The idea is to launch a game when the alarm starts. I have shown the Manifest.xml below. Please correct me if i had made an error. Since I am new to Android, I am not able to figure it out. PS: i have searched other similar questions and corrected many other errors, but still the problem persists.



This is the alarm code I got from a tutorial (AndroidTimeActivity):



public class AndroidTimeActivity extends Activity {

TimePicker myTimePicker;

Button buttonstartSetDialog;
TextView textAlarmPrompt;

TimePickerDialog timePickerDialog;

final static int RQS_1 = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);

buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
buttonstartSetDialog.setOnClickListener(new OnClickListener(){

public void onClick(View v) {
textAlarmPrompt.setText("");
openTimePickerDialog(false);


}});

}


private void openTimePickerDialog(boolean is24r){
Calendar calendar = Calendar.getInstance();

timePickerDialog = new TimePickerDialog(

AndroidTimeActivity.this,
onTimeSetListener,
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
is24r);
timePickerDialog.setTitle("Set Alarm Time");

timePickerDialog.show();

}


OnTimeSetListener onTimeSetListener= new OnTimeSetListener(){


public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();

calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);

calSet.set(Calendar.MINUTE, minute);
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);

if(calSet.compareTo(calNow) <= 0){
//Today Set time passed, count to tomorrow
calSet.add(Calendar.DATE, 1);
}

setAlarm(calSet);

}};

private void setAlarm(Calendar targetCal){

textAlarmPrompt.setText(
"\n\n***\n"
+ "Alarm is set@ " + targetCal.getTime() + "\n"
+ "***\n");

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);

PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(),RQS_1,
intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
pendingIntent);

}


}



This is the AlarmReceiver class:



 public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent arg1) {
Intent activityIntent = new Intent(context, Manager.class);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(activityIntent);

}

}


and here is the Manager class which I want to call when the intent is received by the alarm receiver:



       public class Manager extends Activity {

private static int ROW_COUNT = -1;
private static int COL_COUNT = -1;
private Context context;
private Drawable backImage;
private int [] [] cards;
private List images;
private Card firstCard;
private Card seconedCard;
private ButtonListener buttonListener;


private static Object lock = new Object();

int turns;
private TableLayout mainTable;
private UpdateCardsHandler handler;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);




handler = new UpdateCardsHandler();
loadImages();
setContentView(R.layout.main);


backImage = getResources().getDrawable(R.drawable.icon);

/*

((Button)findViewById(R.id.ButtonNew)).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
newGame();

}


});*/


buttonListener = new ButtonListener();

mainTable = (TableLayout)findViewById(R.id.TableLayout03);


context = mainTable.getContext();

Spinner s = (Spinner) findViewById(R.id.Spinner01);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.type,

android.R.layout.simple_spinner_item);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);

s.setOnItemSelectedListener(new OnItemSelectedListener(){

public void onItemSelected(
android.widget.AdapterView arg0,
View arg1, int pos, long arg3){


((Spinner) findViewById(R.id.Spinner01)).setSelection(0);

int x,y;

switch (pos) {
case 1:
x=4;y=4;
break;
case 2:

x=4;y=5;
break;
case 3:
x=4;y=6;
break;
case 4:
x=5;y=6;
break;
case 5:
x=6;y=6;

break;
default:
return;
}
newGame(x,y);

}




public void onNothingSelected(AdapterView arg0) {
// TODO Auto-generated method stub

}

});
}

private void newGame(int c, int r) {
ROW_COUNT = r;

COL_COUNT = c;

cards = new int [COL_COUNT] [ROW_COUNT];


mainTable.removeView(findViewById(R.id.TableRow01));
mainTable.removeView(findViewById(R.id.TableRow02));

TableRow tr = ((TableRow)findViewById(R.id.TableRow03));
tr.removeAllViews();


mainTable = new TableLayout(context);
tr.addView(mainTable);

for (int y = 0; y < ROW_COUNT; y++) {
mainTable.addView(createRow(y));
}

firstCard=null;
loadCards();


turns=0;
((TextView)findViewById(R.id.tv1)).setText("Tries: "+turns);


}

private void loadImages() {
images = new ArrayList();


images.add(getResources().getDrawable(R.drawable.card1));
images.add(getResources().getDrawable(R.drawable.card2));
images.add(getResources().getDrawable(R.drawable.card3));
images.add(getResources().getDrawable(R.drawable.card4));
images.add(getResources().getDrawable(R.drawable.card5));
images.add(getResources().getDrawable(R.drawable.card6));
images.add(getResources().getDrawable(R.drawable.card7));
images.add(getResources().getDrawable(R.drawable.card8));
images.add(getResources().getDrawable(R.drawable.card9));
images.add(getResources().getDrawable(R.drawable.card10));

images.add(getResources().getDrawable(R.drawable.card11));
images.add(getResources().getDrawable(R.drawable.card12));
images.add(getResources().getDrawable(R.drawable.card13));
images.add(getResources().getDrawable(R.drawable.card14));
images.add(getResources().getDrawable(R.drawable.card15));
images.add(getResources().getDrawable(R.drawable.card16));
images.add(getResources().getDrawable(R.drawable.card17));
images.add(getResources().getDrawable(R.drawable.card18));
images.add(getResources().getDrawable(R.drawable.card19));
images.add(getResources().getDrawable(R.drawable.card20));

images.add(getResources().getDrawable(R.drawable.card21));

}

private void loadCards(){
try{
int size = ROW_COUNT*COL_COUNT;

Log.i("loadCards()","size=" + size);


ArrayList list = new ArrayList();

for(int i=0;i list.add(new Integer(i));
}


Random r = new Random();

for(int i=size-1;i>=0;i--){

int t=0;

if(i>0){
t = r.nextInt(i);
}

t=list.remove(t).intValue();
cards[i%COL_COUNT][i/COL_COUNT]=t%(size/2);

Log.i("loadCards()", "card["+(i%COL_COUNT)+"]["+(i/COL_COUNT)+"]="+

cards[i%COL_COUNT][i/COL_COUNT]);
}
}
catch (Exception e) {
Log.e("loadCards()", e+"");
}

}

private TableRow createRow(int y){

TableRow row = new TableRow(context);
row.setHorizontalGravity(Gravity.CENTER);

for (int x = 0; x < COL_COUNT; x++) {
row.addView(createImageButton(x,y));
}
return row;
}

private View createImageButton(int x, int y){

Button button = new Button(context);
button.setBackgroundDrawable(backImage);
button.setId(100*x+y);
button.setOnClickListener(buttonListener);
return button;
}

class ButtonListener implements OnClickListener {



public void onClick(View v) {

synchronized (lock) {
if(firstCard!=null && seconedCard != null){
return;
}
int id = v.getId();
int x = id/100;
int y = id%100;
turnCard((Button)v,x,y);

}

}

private void turnCard(Button button,int x, int y) {
button.setBackgroundDrawable(images.get(cards[x][y]));

if(firstCard==null){
firstCard = new Card(button,x,y);
}

else{

if(firstCard.x == x && firstCard.y == y){
return; //the user pressed the same card
}

seconedCard = new Card(button,x,y);

turns++;
((TextView)findViewById(R.id.tv1)).setText("Tries: "+turns);



TimerTask tt = new TimerTask() {

@Override
public void run() {
try{
synchronized (lock) {
handler.sendEmptyMessage(0);
}

}
catch (Exception e) {
Log.e("E1", e.getMessage());
}
}
};

Timer t = new Timer(false);
t.schedule(tt, 1300);
}



}

}

class UpdateCardsHandler extends Handler{

@Override
public void handleMessage(Message msg) {

synchronized (lock) {
checkCards();
}
}
public void checkCards(){
if(cards[seconedCard.x][seconedCard.y] == cards[firstCard.x][firstCard.y]){
firstCard.button.setVisibility(View.INVISIBLE);
seconedCard.button.setVisibility(View.INVISIBLE);
}
else {

seconedCard.button.setBackgroundDrawable(backImage);
firstCard.button.setBackgroundDrawable(backImage);
}

firstCard=null;
seconedCard=null;
}
}





}


And here is my manifest, i did create an activity for Manager class, But the "AndroidTime has stopped" error still persists.




package="com.exercise.AndroidTime"

android:versionCode="1"
android:versionName="1.0" >



android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
android:name="com.exercise.AndroidTime.AndroidTimeActivity"

android:label="@string/app_name" >














Thank you for your help.

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...