2014-04-24 132 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);