دوستان اگر امکانش هست منو راهنمایی کنید ، وقتی تومسئله ای بمونم تا حل نشه رو مخم میمونه..
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
مشکل در پروژه Counter استاد
مدیریت گفتگو
آخرین تغییر: 11 سال پیش
در قسمت انتهایی آموزش Counter استاد بعد از پایان تایمر یک toast میذاره من میخوام جای toast یک دیالوگ ساده نمایش داده بشه ؟ خودم اینجوری ست کردم ولی بعد پایان تایم برنامه کرش میکنه !!!
G.HANDLER.post(new Runnable() {
@Override
public void run() {
Toast.makeText(G.context, "Time is Finish..", Toast.LENGTH_SHORT).show();
Dialog dialog = new Dialog(G.context);
dialog.setContentView(R.layout.dialog);
dialog.show();
پاسخها 6
نظرات

نظرات
یعنی کسی نمیتونه جای اون toast یک دیالوگ تعریف کنه؟
.........
سلام راستش من با این مشخصاتی که دادی فقط میتونم بگم تو اکتیویتی ThreadCounter خط 85 خطای کرش وجود داره
حالا شاید بقیه بتونن بهتر راهنمایی کنن
خطاشو خودم پیدا کرده بودم ولی نمیدونم چرا دیالوگ داخل thread کار نمیکنه اینجا هم دوستانی که اهل راهنمایی باشن متاسفانه خیلی کمه!
شما کد کامل این اکتیویتی رو بزار حتما کمک میکنن
به سوال پرسیدنم ربط داره باید دقیق سوالو بپرسی وگرنه کسی که علم غیب نداره
پروژه counter استاد دیگه فک کنم همه داشته باشن من فقط میخواستم اون قسمت آخر که استاد ی Toast گذاشت یه دیالوگ ساده بزارم همین سورس همون سورس استاده فک نکنم کار سختی باشه ولی هر جا سرچ کردم به نتیجه نرسیدم، مشکل من اینه که وقتی به مشکلی بخرم تا حلش نکنم رو مخم میمونه
در کلاس G یک فیلد با نام زیر بسازید :
public static Activity activity;
بعد به ورودی Dialog این فیلد رو بده بجای context:
Dialog dialog = new Dialog(G.activity);
نظرات
این کار رو هم کردم ولی فرقی نکرد دوباره بعد تمام شدن تایم کرش میکنه
package com.uncocoder.app.course.counter;
import android.app.Dialog;
import android.util.Log;
import android.widget.TextView;
public class ThreadCounter extends Thread {
private int seconds;
private int counter;
private TextView textView;
public void setSeconds(int value) {
seconds = value;
counter = seconds;
}
public void setTextView(TextView value) {
textView = value;
}
@Override
public void run() {
super.run();
while (counter > 0) {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
counter--;
if (textView != null) {
G.HANDLER.post(new Runnable() {
@Override
public void run() {
int min = (int) Math.floor(counter / 60);
int sec = counter % 60;
String minPrefix = "";
if (min < 10) {
minPrefix = "0";
}
String secPrefix = "";
if (sec < 10) {
secPrefix = "0";
}
textView.setText(minPrefix + min + ":" + secPrefix + sec);
}
});
}
Log.i("LOG", "Counter: " + counter);
}
G.HANDLER.post(new Runnable() {
@Override
public void run() {
Dialog dialog = new Dialog(G.activity);
dialog.setContentView(R.layout.dialog);
dialog.show();
}
});
}
}
نظرات
package com.uncocoder.app.course.counter;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ActivityMain extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView txtCounter = (TextView) findViewById(R.id.txtCounter);
ThreadCounter counter = new ThreadCounter();
counter.setSeconds(5);
counter.setTextView(txtCounter);
counter.start();
}
}
نظرات
تو Logcat هم خطای NullPointerException میگیره و مربوط میشه به همین تعریف دیالوگ
دوست عزیز مشکلتونو فهمیدم واسه ی دیالوگ ها حتما باید از context اکتیویتی استفاده کنی با context application کرش میده فکر کنم این رو خود استادم گفتن شما فقط بجای G.context از ThreadCounter.this استفاده کن
نمیشه داداش من شما یه لطفی کن سورس برنامه بگیر یه تست خودت بزن اینجوری فک کنم خودتون متوجه قضیه میشین.
اگر هم این قضیه شدنی نیست پس یکی لطفی کنه بگه چطوری میشه یه تایمر تعریف کرد که بعد تمام شدنش بشه از دیالوگ استفاده کرد؟
دادا این کد اینم نتیجش
package mehran.sunofgod.alarm;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
public class AlarmActivity extends Activity {
Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Thread th = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(4000);
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
Dialog d = new Dialog(AlarmActivity.this);
d.setContentView(R.layout.main);
d.show();
}
});
}
});
th.start();
}
}
نظرات
دستت درد نکنه کارم تا حدی راه افتاد کلا میخواستم که از تایمر برنامه استاد جای دیگه استفاده کنم مثلا تو بازی hangman از این به بعدشو یکاریش میکنم. از این که وقت گذاشتی خیلی ممنونم
خواهش میکنم
میدونم چه حالی داری منم وقتی جایی گیر میکنم رو اعصاب و روانم تاثیر میزاره میخوام سرمو بکوبم تو دیوار
خلاصه که تو برنامه نویسی این گرفتاری ها زیاده موفق باشی
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام

نظرات