0
  •             //支付成功,我们就去修改UI上的内容
                //实际上是去修改数据库,其实,支付宝是通过回调的URL地址,通知我们的服务器
            @Override
            public void onPaySuccess() throws RemoteException {
                Log.d(TAG, "onPaySuccess...");
                //Toast.makeText(MainActivity.this, "充值成功", Toast.LENGTH_SHORT).show();
                moneyTv.setText("100");
            }
    
            @Override
            public void onPayFailed(int errorCode, String msg) throws RemoteException {
                Log.d(TAG, "errorCode is " + errorCode + ". errorMsg" + msg);
                Toast.makeText(MainActivity.this, "充值失败", Toast.LENGTH_SHORT).show();
            }
    



    你的Log是有的吧,但是你更新UI是在主线程吗?这个要在主线程呀,否则就报错了。


    你可以打一下线程的名称/ID,看看就知道了。


    1153952789488054272  评论     打赏       拉大锯
    • Joey  回复 @拉大锯
      Log.d onPaySuccess 是有的,我试了一下 ,把Log放在moneyTv的后面,还是有,说明moneyTv是通过了的,怎么就不显示呢?还有,跟老师的视频对比了一下,点击“充值100元”按钮的时候不应该就onDestroy()的, 应该还是在onServiceConnected.... , 我点击这个按钮的时候就直接onDestroy()了。
      Joey 2020-09-07 21:33   回复 1298416835061997568
    • 拉大锯  回复 @Joey
      我在问你更新的时候是什么线程呀,你先回答一下这个呗
      拉大锯 2020-09-07 21:38   回复 1153952789488054272
    • Joey  回复 @拉大锯
      怎么查看线程呀?
      Joey 2020-09-07 22:20   回复 1298416835061997568
    • 拉大锯  回复 @Joey
      Thread.currentThread.getName()
      拉大锯 2020-09-07 22:23   回复 1153952789488054272
    • Joey  回复 @拉大锯
      Thread-2
      Joey 2020-09-07 22:51   回复 1298416835061997568
    • 断点-含光君  回复 @Joey
      Thread-2就是子线程啊。setText,属于更新ui,必须在主线程更新ui。你得到成功结果之后,切换到主线程更新ui吧。
      断点-含光君 2020-09-08 09:10   回复 1139423796017500160
    • 拉大锯  回复 @Joey
      所以就有问题呀!那你有没有想到怎么才可以切换到主线程呢?
      拉大锯 2020-09-08 10:35   回复 1153952789488054272
    • Joey  回复 @拉大锯
      怎么切换线程呢?为什么会发生这样的情况呢?
      Joey 2020-09-08 18:52   回复 1298416835061997568
    • Joey  回复 @Joey
      在看之后的音乐播放器的视频, 知道了用 runOnUiThread可以切换会UI线程,用了run()后,moneyTv.setText还是不能显示100. 跟moneyTv放在一起的Log 都打出来了,
      Joey 2020-09-11 19:50   回复 1298416835061997568
    • Joey  回复 @拉大锯
      在看之后的音乐播放器的视频, 知道了用 runOnUiThread可以切换会UI线程,用了run()后,moneyTv.setText还是不能显示100. 跟moneyTv放在一起的Log 都打出来了,
      Joey 2020-09-11 20:30   回复 1298416835061997568
    • 拉大锯  回复 @Joey
      不可能呀。是不是页面搞错了呢?上代码呗。如果你不够自信的话[龇牙]
      拉大锯 2020-09-11 21:57   回复 1153952789488054272
  • 第三方支付的代码如下:


    public class MainActivity extends AppCompatActivity {
    
        private static final String TAG = "MainActivity";
        private AliPayService aliPayConnection;
        private boolean isBind;
        private Button buyBt;
        private TextView moneyTv;
        private ThirdPartyPayAction mThirdPartyPayAction;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            Log.d(TAG, "onCreate...");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            doBindAliPayService();
            initView();
            setListener();
    
        }
    
        private void setListener() {
            buyBt.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //进行充值
                    try {
                        if (mThirdPartyPayAction != null) {
                            mThirdPartyPayAction.requestPay("充值100元", 100.00f, new PayCallBack());
                        }
                    } catch (RemoteException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        public class PayCallBack extends ThirdPartyPayResult.Stub {
    
                //支付成功,我们就去修改UI上的内容
                //实际上是去修改数据库,其实,支付宝是通过回调的URL地址,通知我们的服务器
            @Override
            public void onPaySuccess() throws RemoteException {
                Log.d(TAG, "onPaySuccess...");
                //Toast.makeText(MainActivity.this, "充值成功", Toast.LENGTH_SHORT).show();
                moneyTv.setText("100");
            }
    
            @Override
            public void onPayFailed(int errorCode, String msg) throws RemoteException {
                Log.d(TAG, "errorCode is " + errorCode + ". errorMsg" + msg);
                Toast.makeText(MainActivity.this, "充值失败", Toast.LENGTH_SHORT).show();
            }
        }
    
        private void doBindAliPayService() {
            Log.d(TAG, "doBindAliPayService");
            Intent intent = new Intent();
            intent.setAction("com.example.ALIPAY_THIRD_PARTY_PAY");
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setPackage("com.example.alipay");
            aliPayConnection = new AliPayService();
            isBind = bindService(intent, aliPayConnection, BIND_AUTO_CREATE);
        }
    
        private void initView() {
            moneyTv = findViewById(R.id.money_tv);
            buyBt = findViewById(R.id.buy_bt);
    
        }
    
        private class AliPayService implements ServiceConnection {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Log.d(TAG, "onServiceConnected..." + service);
                mThirdPartyPayAction = ThirdPartyPayAction.Stub.asInterface(service);
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
                Log.d(TAG, "onServiceDisconnected...");
                aliPayConnection = null;
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (isBind && aliPayConnection != null) {
                Log.d(TAG, "onDestroy...");
                unbindService(aliPayConnection);
                aliPayConnection = null;
                isBind = false;
            }
        }
    }
    


    1298416835061997568  评论     打赏       Joey
    • 跟老师的视频对比了一下,点击“充值100元”按钮的时候不应该就onDestroy(), 应该还是在onServiceConnected.... 求解。

      1298416835061997568  评论     打赏       Joey
      • 那句 话已经告诉你了呀  has not called Looper.prepare()。


        那你就上代码呗,这么多人阅读却没有人给你解答哦。


        你不提供代码,别人怎么分析呢?


        后右已经提示了:Log、代码、现象描述,可以图文结合。所以呀,还是要详细一点别人才快帮助你解决问题。

        1153952789488054272  评论     打赏       拉大锯
        • 都查看过了,把onPaySuccess()里的TOAST去掉就没有上面的错误信息了,onPaySuccess()里的Log能打出来了, 但是就是Log下面一行的moneyTv.setText("100")一直不能在TEXTVIEW中显示100出来,怎么回事啊?

          1298416835061997568  评论     打赏       Joey
          相关问题
          2023-11-21 15:11 13 2
          陈钱罐16 · 领券联盟
          2023-11-11 18:09 23 8
          哈哈android · AOSP
          2023-11-10 15:52 13 12
          2023-11-10 00:26 22 10
          zhanghengze · Android
          2023-10-26 21:52 22 8