Только исходный поток, создавший иерархию представлений, может касаться своих представлений. PayPal MPL Android

#android #paypal

#Android #paypal

Вопрос:

Я разрабатываю и приложение, которое обрабатывает пожертвования, используя MPL Paypal, когда y вызывает следующий код

 // Use checkout to create our Intent.
Intent checkoutIntent = PayPal.getInstance().checkout(payment, this,
        new ResultDelegate());

// Use the android's startActivityForResult() and pass in our
// Intent.
// This will start the library.
startActivityForResult(checkoutIntent, REQUEST_PAYPAL_CHECKOUT);
Log.i(TAG, "Executo todo el procedimiento de paypal.");
 

после всего процесса оплаты
1.- Войдите в систему с учетными данными paypal
2.- Нажмите оплатить в следующем действии
3.- введите номер телефона и pin-код
4.- Нажмите кнопку Создать PIN-код

Отобразится следующая ошибка

 AndroidRuntime  E  FATAL EXCEPTION: Thread-3504
AndroidRuntime  E  android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
AndroidRuntime  E   at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5001)
AndroidRuntime  E   at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:970)
AndroidRuntime  E   at android.view.ViewGroup.invalidateChild(ViewGroup.java:4168)
AndroidRuntime  E   at android.view.View.invalidate(View.java:10248)
AndroidRuntime  E   at android.widget.TextView.invalidateRegion(TextView.java:4406)
AndroidRuntime  E   at android.widget.TextView.invalidateCursor(TextView.java:4349)
AndroidRuntime  E   at android.widget.TextView.spanChange(TextView.java:7239)
AndroidRuntime  E   at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:8847)
AndroidRuntime  E   at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:979)
AndroidRuntime  E   at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:688)
AndroidRuntime  E   at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
AndroidRuntime  E   at android.text.Selection.setSelection(Selection.java:76)
AndroidRuntime  E   at android.text.Selection.setSelection(Selection.java:87)
AndroidRuntime  E   at android.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:302)
AndroidRuntime  E   at android.widget.TextView.setText(TextView.java:3560)
AndroidRuntime  E   at android.widget.TextView.setText(TextView.java:3430)
AndroidRuntime  E   at android.widget.EditText.setText(EditText.java:80)
AndroidRuntime  E   at android.widget.TextView.setText(TextView.java:3405)
AndroidRuntime  E   at com.paypal.android.MEP.b.b.a(Unknown Source)
AndroidRuntime  E   at com.paypal.android.c.f.a(Unknown Source)
AndroidRuntime  E   at com.paypal.android.c.f$3.run(Unknown Source)
 

Ответ №1:

Вам нужно будет установить текст вашего TextView в

 runOnUiThread(new Runnable() {
    @Override
    public void run() {
         //set TextView text here.  Because only the UI thread can update UI.
    }
});
 

Комментарии:

1. Спасибо Джей Санайдер, проблема в том, что я не обновляю какой-либо TextView, является ли активность в PayPal_MPL.jar и я не владею исходным кодом. : D

Ответ №2:

MPL устарел, новая альтернатива.

https://github.com/paypal/PayPal-Android-SDK