我想在活动停止前显示ProgressDialog,因为我应该保存数据。
因此。我试过跟随。
但是。 ProgressDialog不显示并发生异常。
如何解决这个问题?
public class MyActivity extends Activity implements View.OnClickListener {
Button btn_SecondAct;
private ProgressDialog pgd_saveDB;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_SecondAct = (Button) findViewById(R.id.btnSecondAct);
btn_SecondAct.setOnClickListener(this);
createProgressDialog();
}
void createProgressDialog() {
pgd_saveDB = new ProgressDialog(this);
pgd_saveDB.setCancelable(false);
pgd_saveDB.setMessage("On Saving DB data...");
pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// reset the bar to the default value of 0
pgd_saveDB.setProgress(0);
pgd_saveDB.setMax(100);
}
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), SecActivity.class);
startActivity(intent);
}
@Override
protected void onPause() {
super.onPause();
Log.d("myTag", "onPause");
pgd_saveDB.show();
for (int i = 0; i < 100; i++) {
pgd_saveDB.setProgress(i);
// Here is saveDataToDB line.
msh_handler.insertDTO((B_E_BuyDB_DTO) lst_sltTabListRowGroup.get(i));
}
pgd_saveDB.dismiss();
}
package com.example.ProgressDialog;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
/**
* Created by user on 13. 12. 4.
*/
public class SecActivity extends Activity implements View.OnClickListener{
Button btn_MainAct;
private ProgressDialog pgd_saveDB;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btn_MainAct = (Button) findViewById(R.id.btnMainAct);
btn_MainAct.setOnClickListener(this);
createProgressDialog();
}
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), MyActivity.class);
startActivity(intent);
}
void createProgressDialog() {
pgd_saveDB = new ProgressDialog(this);
pgd_saveDB.setCancelable(false);
pgd_saveDB.setMessage("On Saving DB data...");
pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// reset the bar to the default value of 0
pgd_saveDB.setProgress(0);
pgd_saveDB.setMax(1000);
}
@Override
public void onPause() {
super.onPause();
Log.d("myTag", "onPause");
pgd_saveDB.show();
for (int i = 0; i < 100; i++) {
pgd_saveDB.setProgress(i);
}
pgd_saveDB.dismiss();
}
}
这是异常消息。
12-04 14:28:18.675 24407-24407/com.example.ProgressDialog E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ProgressDialog/com.example.ProgressDialog.SecActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.ProgressDialog.SecActivity.onCreate(SecActivity.java:23)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
12-04 14:28:18.683 227-243/? E/﹕ Dumpstate > /data/log/dumpstate_app_error
答案 0 :(得分:0)
在onPause内部将对话框置于异步任务中:
public class youtask extends AsyncTask<Void, Integer, String>
{
@Override
protected void onPreExecute() {
pgd_saveDB = new ProgressDialog(this);
pgd_saveDB.setCancelable(false);
pgd_saveDB.setMessage("On Saving DB data...");
pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// reset the bar to the default value of 0
pgd_saveDB.setProgress(0);
pgd_saveDB.setMax(100);
pgd_saveDB.show();
}
@Override
protected String doInBackground(Void... params) {
for (int i = 0; i < 100; i++) {
@Override
public void transferred(long num) {
publishProgress((int) (i);
}
// Here is saveDataToDB line.
msh_handler.insertDTO((B_E_BuyDB_DTO) lst_sltTabListRowGroup.get(i));
}
}
@Override
protected void onProgressUpdate(Integer... progress) {
pgd_saveDB.setProgress((int) (progress[0]));
}
protected void onPostExecute(Void result) {
//result is the response back from "doInBackground"
dialog.cancel();
}
}
答案 1 :(得分:0)
缺少setContentView
public class SecActivity extends Activity implements View.OnClickListener{
Button btn_MainAct;
private ProgressDialog pgd_saveDB;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity); //missing
答案 2 :(得分:0)
无需在创建活动时创建进度对话框的初始化。
每当您需要时,然后创建对话框。根据您的要求,您可以按照以下方式...
public class Activity_leave extends AsyncTask<Integer, Integer, Integer>
{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pgd_saveDB = new ProgressDialog(this);
pgd_saveDB.setCancelable(false);
pgd_saveDB.setMessage("On Saving DB data...");
pgd_saveDB.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// reset the bar to the default value of 0
pgd_saveDB.setProgress(0);
pgd_saveDB.setMax(1000);
}
@Override
protected Integer doInBackground(Integer... params) {
// TODO Auto-generated method stub
//Write your saving code here..
return null;
}
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Intent intent = new Intent(getApplicationContext(), MyActivity.class);
startActivity(intent);
}
}