在子线程中使用组件ui会报错?
例如:
//4、发起请求 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("login", e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { String s = response.body().string(); Log.e("login", s); //在子线程中使用组件ui会报错 Toast.makeText(LoginActivity.this,"",Toast.LENGTH_LONG).show();; } });
第一种解决方法:
@Override public void onResponse(Call call, Response response) throws IOException { String s = response.body().string(); Log.e("login", s); //在子线程中使用组件ui会报错 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(LoginActivity.this,"",Toast.LENGTH_LONG).show();; } }); Toast.makeText(LoginActivity.this,"",Toast.LENGTH_LONG).show();; }
第二种解决方法:
@Override public void onResponse(Call call, Response response) throws IOException { String s = response.body().string(); Log.e("login", s); //在子线程中使用组件ui会报错 Looper.prepare(); Toast.makeText(LoginActivity.this,"",Toast.LENGTH_LONG).show();; Looper.loop(); }
总结:为啥在主线程中使用组件不会报错,因为主线程中父类已经帮我们做了Looper操作了,所以主线程中不需要额外的操作了。