Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Toast未显示并出错_Android_Multithreading_Android Toast - Fatal编程技术网

Android Toast未显示并出错

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

当internet连接可用但出现错误时,我想显示
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 <-- ");
            }
        });
}