Android Toast未显示并出错
当internet连接可用但出现错误时,我想显示Android Toast未显示并出错,android,multithreading,android-toast,Android,Multithreading,Android Toast,当internet连接可用但出现错误时,我想显示Toast 我的代码 public class MainActivity extends ActionBarActivity { EditText et, pass; ConnectivityManager cm; NetworkInfo ni; ProgressDialog dialog = null; @Override protected void onCreate(Bundle saved
Toast
我的代码
public class MainActivity extends ActionBarActivity {
EditText et, pass;
ConnectivityManager cm;
NetworkInfo ni;
ProgressDialog dialog = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("LOG", "Start <-- ");
et = (EditText) findViewById(R.id.username);
pass = (EditText) findViewById(R.id.password);
}
public void onClick(View v) {
Log.i("LOG", "click button <-- ");
if(!et.getText().toString().matches("") &&
!pass.getText().toString().matches(""))
{
Log.i("LOG", "check network <-- ");
isNetworkConnected();
}else{
Toast.makeText(getBaseContext(),"Enter user & pass",
Toast.LENGTH_SHORT).show();
}}
private boolean isNetworkConnected() {
Log.i("LOG", "start check network <-- ");
cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
ni = cm.getActiveNetworkInfo();
if (ni == null) {
Toast.makeText(getApplicationContext(),
"Make sure you connect to the Internet!", Toast.LENGTH_SHORT).show();
return false;
}else {
waiting();
return true;
}
}
void waiting(){
dialog = ProgressDialog.show(MainActivity.this, "",
"Please wait a moment....", true);
new Thread(new Runnable() {
public void run() {
ShowToast(MainActivity.this);
}
}).start();
}
void ShowToast(Context context) {
runOnUiThread(new Runnable() {
public void run() {
dialog.dismiss();
}
});
Log.i("LOG", "1 <-- ");
Toast.makeText(context,"Connect OK",
Toast.LENGTH_SHORT).show();
Log.i("LOG", "2 <-- ");
}
}
公共类MainActivity扩展了ActionBarActivity{
编辑文本,通过;
连接管理器cm;
网络信息ni;
ProgressDialog=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
i(“Log”,“Start根据错误,您正在从工作线程调用toast,但应该从处理UI线程的函数调用它。
在此处检查相同的问题:
Toast应该在UI线程上
取代
runOnUiThread(new Runnable() {
public void run() {
dialog.dismiss();
}
});
Log.i("LOG", "1 <-- ");
Toast.makeText(context,"Connect OK",
Toast.LENGTH_SHORT).show();
Log.i("LOG", "2 <-- ");
with
runOnUiThread(new Runnable() {
public void run() {
dialog.dismiss();
Toast.makeText(context,"Connect OK",
Toast.LENGTH_SHORT).show();
}
});
Log.i("LOG", "1 <-- ");
Log.i("LOG", "2 <-- ");
runOnUiThread(新的Runnable(){
公开募捐{
dialog.dismise();
}
});
Log.i(“Log”,“1您只能在UI线程中显示Toast
。不确定为什么要在那里创建新线程
void waiting(){
dialog = ProgressDialog.show(MainActivity.this, "",
"Please wait a moment....", true);
new Thread(new Runnable() {
public void run() {
ShowToast(MainActivity.this);
}
}).start();
}
void ShowToast(Context context) {
runOnUiThread(new Runnable() {
public void run() {
dialog.dismiss();
Log.i("LOG", "1 <-- ");
Toast.makeText(context,"Connect OK",
Toast.LENGTH_SHORT).show();
Log.i("LOG", "2 <-- ");
}
});
}
void waiting(){
dialog=ProgressDialog.show(MainActivity.this,“,
“请稍等片刻……”,没错);
新线程(newrunnable()){
公开募捐{
showtoos(main活动,this);
}
}).start();
}
void showtoos(上下文){
runOnUiThread(新的Runnable(){
公开募捐{
dialog.dismise();
Log.i(“Log”,“1您可以使用处理程序通过调用showtoos(上下文)来处理消息
或者您可以像这样调用showtoos(getApplicationContext());您可以在类中粘贴第87行吗?我不知道为什么在线程内部调用showtoos(MainActivity.this);
。您可以简单地调用该方法而不使用线程。
void waiting(){
dialog = ProgressDialog.show(MainActivity.this, "",
"Please wait a moment....", true);
new Thread(new Runnable() {
public void run() {
ShowToast(MainActivity.this);
}
}).start();
}
void ShowToast(Context context) {
runOnUiThread(new Runnable() {
public void run() {
dialog.dismiss();
Log.i("LOG", "1 <-- ");
Toast.makeText(context,"Connect OK",
Toast.LENGTH_SHORT).show();
Log.i("LOG", "2 <-- ");
}
});
}