我收到此错误“无法在未调用Looper.prepare()的线程内创建处理程序”
你能告诉我如何解决吗?
public class PaymentActivity extends BaseActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.payment); final Button buttonBank = (Button) findViewById(R.id.buttonBank); buttonBank.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { progressDialog = ProgressDialog.show(PaymentActivity.this, "", "Redirecting to payment gateway...", true, true); new Thread() { public void run() { try { startPayment("Bank"); } catch (Exception e) { alertDialog.setMessage(e.getMessage()); handler.sendEmptyMessage(1); progressDialog.cancel(); } } }.start(); } });
StartPayment方法:
private void startPayment(String id) { Bundle b = getIntent().getExtras(); final Sail sail = b.getParcelable(Constant.SAIL); final Intent bankIntent = new Intent(this, BankActivity.class); try { Reservation reservation = RestService.createReservation( sail.getId(), getSharedPreferences(Constant.PREF_NAME_CONTACT, 0)); bankIntent.putExtra(Constant.RESERVATION, reservation); // <workingWithDB> Storing Reservation info in Database DBAdapter db = new DBAdapter(this); db.open(); @SuppressWarnings("unused") long rowid; rowid = db.insertRow(sail.getId(), sail.getFrom(), sail.getTo(), sail.getShip(), sail.getDateFrom().getTime(), sail.getPrice().toString(), reservation.getId().floatValue()); db.close(); // </workingWithDB> String html = PaymentService.getRedirectHTML(id, reservation); bankIntent.putExtra(Constant.BANK, html); } catch (Exception e) { AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog alertDialog = builder.create(); alertDialog.setMessage(e.getMessage()); alertDialog.show(); } startActivity(bankIntent); }
您应该知道,当您尝试修改UI时, 唯一 可以执行此操作的线程是UiThread。
UiThread
因此,如果要在另一个线程中修改UI,请尝试使用以下方法: Activity.runOnUiThread(new Runnable);
Activity.runOnUiThread(new Runnable);
您的代码应如下所示:
new Thread() { public void run() { YourActivity.this.runOnUiThread(new Runnable(){ @Override public void run(){ try { startPayment("Bank");//Edit,integrate this on the runOnUiThread } catch (Exception e) { alertDialog.setMessage(e.getMessage()); handler.sendEmptyMessage(1); progressDialog.cancel(); } }); } } }.start();