How show AlertDialog with AsyncTask - android

i'am trying develop a game in android that, when my doll crash with a bottle in a screen, show a Dialog with 2 options but i don't know...
public void whenDollCrash(Grafico elementofaba,Grafico elementoBotella){
if((elementofaba.getPosX()+elementofaba.getAncho()>=elementoBotella.getPosX()+15)&&
(elementofaba.getPosX()+elementofaba.getAncho() <= elementoBotella.getPosX()+elementoBotella.getAncho()+15)&&
(elementofaba.getPosY()+elementofaba.getAlto()>=elementoBotella.getPosY())
&& (elementofaba.getPosY()+elementofaba.getAlto() <= elementoBotella.getPosY()+elementoBotella.getAlto())){
juego.detener();
hiloFaba.detener();
sonidoJuego.stop();
golpe.start();
Async a= main.new Async();
a.execute();
Log.i("parada", "esto furruca");
}
and my class AsyncTask is the next.
public class Async extends AsyncTask{
AlertDialog.Builder builder;
#Override
protected Void doInBackground(Void... params) {
return null;
}
#Override
protected void onPreExecute() {
super.onPreExecute();
builder =
new AlertDialog.Builder(MainActivity.this);
}
#Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
builder.setMessage("¿Confirma la acción seleccionada?")
.setTitle("Confirmacion")
.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
})
.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
Help me!!
In the logCat always shows NullPointerException

This guy looks really suspicious
Async a= main.new Async();
You should use something like this
public class Async extends AsyncTask<Void, Void, Void> {
AlertDialog.Builder builder;
WeakReference<Activity> activityWeakRef;
public Async(Activity context) {
activityWeakRef = new WeakReference<Activity>(context);
}
#Override
protected Void doInBackground(Void... params) {
return null;
}
#Override
protected void onPreExecute() {
super.onPreExecute();
}
#Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (activityWeakRef != null && activityWeakRef.get() != null) {
builder = new AlertDialog.Builder(activityWeakRef.get());
builder.setMessage("¿Confirma la acción seleccionada?").setTitle("Confirmacion").setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
}
}
and use it like this in your custom view
Async a = new Async((Activity) getContext());
a.execute()

Related

Is there a way to show AlertDialog in AsyncTask commonly?

I want to show AlertDialog which is in other class in AsyncTask.
Example>
public class WardListAsyncTask extends AsyncTask<HashMap<String, String>, String, Object> {
#Override
protected void onPreExecute() {
super.onPreExecute();
}
#Override
protected Object doInBackground(HashMap<String, String>... params) {
...
}
#Override
protected void onPostExecute(Object result) {
ConfirmAlertDialog(ez_WardList.this,"HI?");
//this method is in another Class & I want to use this method another Asynctask also..
}
and ConfirmAlertDialog is...
Context g_ctx;
String g_content;
public void ez_ConfirmAlertDialog(Context ctx, String content) {
this.g_ctx=ctx;
this.g_content=content;
runOnUiThread(new Runnable() {
#Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(g_ctx, AlertDialog.THEME_HOLO_LIGHT);
builder.setMessage(g_content).setPositiveButton(getString(R.string.kor_confirm),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
alertDialog.getWindow().setLayout(displayWidth / 2, LayoutParams.WRAP_CONTENT);
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.rgb(10, 174, 239));
}
});
}
I think g_ctx.class.runonuiThread ... but I can't call runonuithread...
How can I solve it?
runOnUiThread method is present in Activity class. So should pass Activity into your class.
Example:
public class MyClass{
public void ez_ConfirmAlertDialog(Activity activity, String content) {
this.g_ctx=ctx;
this.g_content=content;
if(activity == null){
return;
}
activity.runOnUiThread(new Runnable() {
#Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(g_ctx, AlertDialog.THEME_HOLO_LIGHT);
builder.setMessage(g_content).setPositiveButton(getString(R.string.kor_confirm),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
alertDialog.getWindow().setLayout(displayWidth / 2, LayoutParams.WRAP_CONTENT);
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.rgb(10, 174, 239));
}
});
}
}
You can call it in main thread using handler
new Handler(Looper.getMainLooper()).post(new Runnable() {
#Override
public void run() {
// Your code here
}
});

AsyncTask class not responding inside AlertDialog

I am trying to run login class inside AlertDialog but no result as expected even no logcat error for login class. Hope someone can help me.
public class MainActivity extends Activity
//Inflation
button1= (Button)findViewById(R.id.btnOrderSubmit);
textView1= = (TextView)findViewById(R.id.editenquiry);
button1.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
//Intent method
}
});
//OnclickListener for TextView
textView1.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0) {
AlertDialog.Builder login = new AlertDialog.Builder(MainActivity.this);
login.setMessage("For Enquiry, Please Login");
login.setPositiveButton("Log In", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int arg1) {
enquirylogin();
}
});
login.setNegativeButton("Continue", new DialogInterface.OnClickListener(){
#Override
public void onClick(DialogInterface dialog, int arg1) {
//Intent here
}
});
login.show();
}
private void enquirylogin() {
// TODO Auto-generated method stub
LayoutInflater li = LayoutInflater.from(MainActivity.this);
View promptsView = li.inflate(R.layout.enqlogin, null);
AlertDialog.Builder enqLogin = new AlertDialog.Builder(MainActivity.this);
enqLogin.setView(promptsView);
enusername=(EditText) promptsView.findViewById(R.id.enqusername);
enpassword=(EditText) promptsView.findViewById(R.id.enqpassword);
enqLogin.setCancelable(true);
enqLogin.setMessage("Please Login Now");
enqLogin.setPositiveButton("Submit",new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
new ELogin();
}
});
enqLogin.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
#Override
public void onClick(DialogInterface dialog, int which) {
}
});
enqLogin.show();
}
Alertdialog contains promptsView where Elogin class is calling
class ELogin extends AsyncTask<String, JSONObject, JSONObject>{
ProgressDialog pDialog;
protected void onPreExecute() {
pDialog = new ProgressDialog(MainActivity.this);
}
protected JSONObject doInBackground(String... arg0) {
strELogin=enusername.getText().toString();
strEPassword=enpassword.getText().toString();
//String response =null;
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("txtUName", strELogin));
params.add(new BasicNameValuePair("txtPass", strEPassword));
JSONObject json = jsonParser.makeHttpRequest (LOGIN_URL, "POST", params);
return json;
}
protected void onPostExecute(JSONObject result) {
try {
pDialog.dismiss();
int success = result.getInt(TAG_SUCCESS);
if(success == 1) {
Log.d("Login Successful!", result.toString());
Toast.makeText(MainActivity.this, "Authentication Success",Toast.LENGTH_LONG).show();
String role_rs = result.getString(TAG_ROLE_RS);
String role_id = result.getString(TAG_CID_RS);
}else{
Toast.makeText(MainActivity.this, "try again!!!!!!", Toast.LENGTH_LONG).show();
Log.d("try Again!", result.getString(TAG_MESSAGE));
}
}catch (JSONException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}
});
}
When creating a new instance of ELogin, you should call .execute() on it to start the task.
The official docs tells you about all the things of threading and AsyncTasks: http://developer.android.com/guide/components/processes-and-threads.html.
Missing below:
new ELogin().execute();
You must have to execute() your ASYNC task.
Hope this will help you.

Set Progress Dialog properly in asynctask

I currently trying to show a progress dialog on OnclickListener of a Dialogbox since my items are taking too long to fetch from Server.
I use Async task as suggested here (Android progress dialog) and this post (android problem with progress dialog) to show progress dialog The progress dialog is shown , however the code returns exception when it goes to do background that " Looper is not set". And when I set looper nothing happens.
I am not sure at this stage what is it that I am doing wrong.
public void firstMethod()
{
final CustomObj obj = getCustomObj();//not imp
Messages.getInstance().showAlert(MainActivity.this, "message", false, new DialogInterface.OnClickListener()
{
#Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
}, new DialogInterface.OnClickListener()
{
#Override
public void onClick(DialogInterface dialog, int which)
{
gotoAnotherPge(obj);
}
});
}
public void gotoAnotherPge(final CustomObject obj)
{
final ProgressDialog pd = new ProgressDialog(MainActivity.this);
new AsyncTask<Object, Object, Boolean>()
{
protected void onPreExecute()
{
pd.setMessage(String.format(Statics.getText(MainActivity.this, R.raw.dictionary, "subscriptions_loading_unsubscribing")));
pd.show();
}
protected Boolean doInBackground(Object... params)
{
try{
Looper.prepare();
final LocalPopulator lp = new LocalPopulator(MainActivity.this, 0)
{
#Override
public void populate()
{
List<Serializable> items = Arrays.asList(getItemHere(obj));
List<Serializable> listItems = new ArrayList<Serializable>();
listItems.addAll(items);
Serializable[] sItems = listItems.toArray(new Serializable[menuItems.size()]);
result = sItems;
}
};
showNextPage(true, 1, 0, lp);
Looper.loop();
}catch (Exception e){
Log.e("tag", e.getMessage());
/*
* The task failed
*/
return false;
}
return true;
}
protected void onPostExecute(Boolean result)
{
pd.dismiss();
}
};
MainActivity.this.runOnUiThread (new Runnable()
{
#Override
public void run()
{
// dismiss the progressdialog
pd.dismiss();
}
});
}

Android ProgressDialog doesn't show

I create an AlertDialog to let the user choose if download something from the server.
If the user choose to download, the AlertDialog is dismissed, and came up a ProgressDialog connected to a AsyncTask.
The ProgressDialog is never showed. The "ok" button of AlertDialog remains selected until the end of the operations of the AsyncTask.
If I "comment" the AsyncTask operation in the code, the AlertDialog is correctly dismissed, and the ProgressDialog shows up.
I haven't tried the application on a real device, but only the simulator.
Which is the problem?
Try this code this may help you
private class allinfo extends AsyncTask<String, Void, JSONObject> {
private ProgressDialog dialog;
protected void onPreExecute(){
dialog = ProgressDialog.show(collection.this, "Loading", "Loading. Please wait...", true,false);
}
#Override
protected JSONObject doInBackground(String... arg0) {
// TODO Auto-generated method stub
return json;
}
protected void onPostExecute(JSONObject json)
{
dialog.dismiss();
info(json);
}
}
final AlertDialog d = new AlertDialog.Builder(youclassname.this)
.setView(input)
.setTitle(R.string.message)
.setPositiveButton(android.R.string.ok,
new Dialog.OnClickListener() {
public void onClick(DialogInterface d, int which) {
//Do nothing here. We override the onclick
}
})
.setNegativeButton(android.R.string.cancel, null)
.create();
d.setOnShowListener(new DialogInterface.OnShowListener() {
public void onShow(DialogInterface dialog) {
Button b = d.getButton(AlertDialog.BUTTON_POSITIVE);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
startDownload();//begin downloading
d.dismiss();
}
});
}
});
d.show();
here is startDownload part.
private void startDownload() {
String url ="file download link";
Toast.makeText(dwn.this, url,Toast.LENGTH_LONG).show();
new DownloadFileAsync().execute(url);
}
here is the asynctask
class DownloadFileAsync extends AsyncTask<String, String, String> {
#Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_DOWNLOAD_PROGRESS);
}
#Override
protected String doInBackground(String... aurl) {
int count;
try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/file.type");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
}
catch (Exception e) {
// TODO Auto-generated catch block
}
return null;
}
protected void onProgressUpdate(String... progress) {
Log.d("ANDRO_ASYNC",progress[0]);
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
#Override
protected void onPostExecute(String unused) {
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
here is the code for progress dialog
#Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Downloading PDF file");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
return mProgressDialog;
default:
return null;
}
}
ProgressDialog implementation in AsyncTask example using AlertDialog positive button:
public class MainActivity extends Activity {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// set title
alertDialogBuilder.setTitle("Your Title");
// set dialog message
alertDialogBuilder
.setMessage("Click yes to go to AsyncTask!")
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
new MyAsyncTaskClass().execute();
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
// Here is the start of the AsyncTask
class MyAsyncTaskClass extends AsyncTask<String, String, Void> {
private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
protected void onPreExecute() {
progressDialog.setMessage("Dialog Message");
progressDialog.show();
progressDialog.setCanceledOnTouchOutside(false);
}
#Override
protected Void doInBackground(String... params) {
// TODO stuff
}
protected void onPostExecute(Void v) {
this.progressDialog.dismiss();
}
}
}

problem to show progress bar

i want to show spinning wheel progress but it doesn't show anything.
final ProgressDialog dialog = ProgressDialog.show(AppListActivity.this,
"", "Loding...", true);
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
dialog.dismiss();
}
};
Thread checkUpdate = new Thread() {
public void run() {
// Set our custom array adapter as the ListView's adapter.
listAdapter = new AppArrayAdapter(AppListActivity.this,
appsList);
mainListView.setAdapter(listAdapter);
handler.sendEmptyMessage(0);
}
};
checkUpdate.start();
please figure out this one..
thanks..
you haven't written dialog.show()..
refer to this code
ProgressDialog UpdateDialog = new ProgressDialog(ClassContext);
#Override
protected void onPreExecute() {
// TODO Auto-generated method stub
UpdateDialog.setTitle("MyApp");
UpdateDialog.setMessage("Processing data...");
UpdateDialog.show();
super.onPreExecute();
}
#Override
protected Object doInBackground(Object... params) {
//your code
}
#Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
//your code
UpdateDialog.dismiss();
}
ProgressDialog mPrograss=new ProgressDialog(location.this);
mPrograss.setTitle("loading....");
mPrograss.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mPrograss.setMax(1);
mPrograss.setProgress(2000);
mPrograss.setButton("save", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
}
});
mPrograss.setButton2("cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
}
});
mPrograss.show();
i think u can use the code below.
private ProgressDialog pd;
pd = ProgressDialog.show(context, "Please wait...", "Saving to database...", true,false);
.
pd.dismiss();

Categories

Resources