2014-04-24 128 views
0

我想在我的Activity中显示ProgressDialogOnClick()方法。我正在做如下,但有一个错误。有什么可以解决的?在按钮上显示ProgessDialog点击


04-24 10:52:46.241: E/AndroidRuntime(21846): FATAL EXCEPTION: main 
04-24 10:52:46.241: E/AndroidRuntime(21846): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
04-24 10:52:46.241: E/AndroidRuntime(21846): at android.view.ViewRoot.setView(ViewRoot.java:561) 
04-24 10:52:46.241: E/AndroidRuntime(21846): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
04-24 10:52:46.241: E/AndroidRuntime(21846): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-24 10:52:46.241: E/AndroidRuntime(21846): at android.app.Dialog.show(Dialog.java:265) 
04-24 10:52:46.241: E/AndroidRuntime(21846): at com.wamiq.test_layout.ComposeMessage$4.onClick(ComposeMessage.java:237) 
04-24 10:52:46.241: E/AndroidRuntime(21846): at android.view.View.performClick(View.java:2532) 

bSend.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     if (etTo.getText().toString().compareTo("") == 0) 
      Toast.makeText(getApplicationContext(), 
        "no sender specified", Toast.LENGTH_SHORT).show(); 
     else { 
      ProgressDialog progress = new ProgressDialog(getApplicationContext()); 
      progress.setTitle("Sending Mail"); 
      progress.setMessage("Please Wait..."); 
      progress.show(); 

      int flag = sendMail(etTo.getText().toString(), etCc.getText() 
        .toString(), etBcc.getText().toString(), etSubject 
        .getText().toString(), etMessage.getText() 
        .toString(), etSign.getText().toString(), attachlst); 
      // To dismiss the dialog 
      progress.dismiss(); 
     } 
    } 
}); 
+0

,什么是错误?另外,我可以看到你在显示它后不久就抛弃了“对话框”。 –

+0

显示你的logcat – duggu

+0

什么是错误? – Piyush

回答

1

只需卸下progress.dismiss();在你的其他部分,因为当你show()你的对话,之后直接您是贬,从而为你的对话将在同一显示时间会被解雇,你不会理解它。

,所以我会建议你使用AsyncTask显示和删除您的对话框如下图所示:从

ProgressDialog progress = new ProgressDialog(getApplicationContext()); 

class progressdialog extends AsyncTask<String, Integer, String> { 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
      ProgressDialog progress = new ProgressDialog(YourActivityname.this); 
     progress.setTitle("Sending Mail"); 
        progress.setMessage("Please Wait..."); 
        progress.show(); 

    } 

    @Override 
    protected String doInBackground(String... params) { 
      int flag = sendMail(etTo.getText().toString(), etCc.getText() 
       .toString(), etBcc.getText().toString(), etSubject 
       .getText().toString(), etMessage.getText() 
       .toString(), etSign.getText().toString(), attachlst); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
       progress.dismiss(); 
      } 
    } 
+0

他仍然有sendMail谁知道什么可能有一个长期的处理.. –

+0

有显示和解雇之间的函数调用需要时间来完成...所以我想添加一个对话框以显示“Please Wait”等消息... 还有其他方法吗? – Wamiq

+0

是的,你可以使用上面提到的一个用户的asynctask – Saqib

0

更改为

ProgressDialog progress = new ProgressDialog(YourActivityName.this); 

因为getApplicationContext()是您的ApplicationContext,而YourActivityName.this是您的particular class or ActivityContext

0

在ProgressDialog初始化更换

ProgressDialog progress = new ProgressDialog(getApplicationContext()); 

到:

ProgressDialog progress = new ProgressDialog(YourActivity.this); 
0

试试这个...

MainActivity.java

package com.example.progressdialogpractice; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.ComponentName; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity { 
    private ProgressDialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Button a =(Button)findViewById(R.id.button1); 
a.setOnClickListener(new OnClickListener(){ 

@Override 
public void onClick(View arg0) { 
// TODO Auto-generated method stub 

    Intent intent = new Intent(); 
    intent.setComponent(new ComponentName("com.example.progressdialogpractice", "com.example.progressdialogpractice.SubActivity")); 
    startActivity(intent); 

}}); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu.main, menu); 
return true; 
} 

} 

SubActivity.java

package com.example.progressdialogpractice; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.Toast; 

public class SubActivity extends Activity { 
    private ProgressDialog progressDialog; 
    private Handler UIhandler; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
UIhandler = new Handler(); 
setContentView(R.layout.sub); 
new LoginProgressTask().execute(1); 

} 

class LoginProgressTask extends AsyncTask<Integer, Integer, Boolean> { 
@Override 
protected Boolean doInBackground(Integer...a) { 
    try { 
    Thread.sleep(4000); // Do your real work here 
    } catch (InterruptedException e) { 
    e.printStackTrace(); 
    } 
    return Boolean.TRUE; // Return your real result here 
} 
@Override 
protected void onPreExecute() { 
UIhandler.post(new Runnable() { 
      @Override 
      public void run() { 
progressDialog = ProgressDialog.show(SubActivity.this,"wait","downloading"); 
      } 
     }); 
} 
@Override 
protected void onPostExecute(Boolean result) { 
    // result is the value returned from doInBackground 

UIhandler.post(new Runnable() { 
      @Override 
      public void run() { 
    progressDialog.dismiss(); 
      Toast.makeText(SubActivity.this, "Hello", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
} 
} 
} 

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView1" 
     android:layout_below="@+id/textView1" 
     android:layout_marginTop="58dp" 
     android:text="Button" /> 

</RelativeLayout> 

sub.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <TextView 
     android:id="@+id/sub" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Fuck you dipshit" /> 



</RelativeLayout> 
0

用户活动场所的应用程序上下文的语境

wrong :ProgressDialog progress = new ProgressDialog(getApplicationContext()); 
correct :ProgressDialog progress = new ProgressDialog(ActvityName.this);