我试图从按钮事件调用私有类,我得到java.lang.RuntimeException:

时间:2012-04-08 19:24:57

标签: android

以下是我的代码:基本上我调用进度类来从按钮监听器运行它并且我收到此错误

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

是从按钮或菜单运行此进度类的方法吗?

public class ProgressDialogeActivity extends Activity {
private ProgressDialog dialog;
int count = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    // running from main activity
    dialog = new ProgressDialog(this);
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    dialog.setMessage("Deleteng Contacts ...");
    dialog.setMax(50);
    // dialog.show();
    // dialog.setProgress(40);
    Object Maxmssg = checkhowmanysms();
    // dialog.setMax((Integer) Maxmssg);

    Button deletesms = (Button) findViewById(R.id.button1);
    deletesms.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            progress prog = new progress();
            prog.start();

        }
    });

}

public class progress extends Thread {
    @Override
    public void run() {

        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setMessage("Deleteng Contacts ...");
        int size = checkhowmanysms();
        Object Maxmssg = checkhowmanysms();
        dialog.setMax((Integer) Maxmssg);
        dialog.show();

        Uri inboxUri = Uri.parse("content://sms");
        Cursor item = getContentResolver().query(inboxUri, null, null,
                null, null);
        while (item.moveToNext()) {
            count++;
            dialog.setProgress(count);

            // Delete the SMS
            String pid = item.getString(0); // Get id;
            String uri = "content://sms";
            getContentResolver().delete(Uri.parse(uri), null, null);

        }
        dialog.dismiss();

    }

}

2 个答案:

答案 0 :(得分:0)

您正尝试从后台线程修改UI,不允许您这样做,而是使用HandlerAsyncTask(对于UI修改部分)。

答案 1 :(得分:0)

问题是您正在尝试从非UI线程更改UI。对此的解决方案是使用Handler和其中一种post()方法,或者如果您可以调用Activity s runOnUiThread() - 方法