无法添加窗口

时间:2018-08-10 17:00:22

标签: android error-handling

我遇到了麻烦,我认为最大的问题是我的应用在打开对话框之前尝试连接到服务器。但是我可能有很多问题,但是我现在的主要问题是这个错误,

FATAL EXCEPTION: main
Process: com.gdptuning.gdptuning, PID: 10744
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@d87dfd5 is not valid; is your activity running?
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:683)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:319)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
    at android.app.Dialog.show(Dialog.java:325)
    at com.gdptuning.gdptuning.TuneActivity$4.onErrorResponse(TuneActivity.java:335)
    at com.android.volley.Request.deliverError(Request.java:630)
    at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:108)
    at android.os.Handler.handleCallback(Handler.java:815)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5683)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)

这是我的代码:

public class TuneActivity extends AppCompatActivity implements 
View.OnClickListener {

//ESP32 aREST server address
final String url = "http://192.168.7.1";
boolean isConnected = false;
boolean isProcessing = true;
String device = "GDP";
Button btn1, btn2, btn3, btn4, btn5, btn_num1, btn_num2, btn_num3, btn_num4, btn_num5, btn_home;
ImageView btn_info, wifi_switch;
int tuneMode = 0;
WifiManager wifi;
private RequestQueue queue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_tune);

    //set widget
    btn1 = findViewById(R.id.btn1);
    btn2 = findViewById(R.id.btn2);
    btn3 = findViewById(R.id.btn3);
    btn4 = findViewById(R.id.btn4);
    btn5 = findViewById(R.id.btn5);
    btn_num1 = findViewById(R.id.tgl_num1);
    btn_num2 = findViewById(R.id.tgl_num2);
    btn_num3 = findViewById(R.id.tgl_num3);
    btn_num4 = findViewById(R.id.tgl_num4);
    btn_num5 = findViewById(R.id.tgl_num5);
    btn_home = findViewById(R.id.btn_home);
    wifi_switch = findViewById(R.id.wifi_switch);

    //Set On Click Listener
    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn3.setOnClickListener(this);
    btn4.setOnClickListener(this);
    btn5.setOnClickListener(this);
    btn_num1.setOnClickListener(this);
    btn_num2.setOnClickListener(this);
    btn_num3.setOnClickListener(this);
    btn_num4.setOnClickListener(this);
    btn_num5.setOnClickListener(this);
    btn_home.setOnClickListener(this);

    //Working with wifi
    queue = VolleySingleton.getInstance(this).getRequestQueue();
    wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    wifi_switch = findViewById(R.id.wifi_switch);
    wifi_switch.setOnClickListener(this);
    if (wifi.isWifiEnabled()) {
        wifi_switch.setImageResource(R.drawable.wifi_pressed);
    } else {
        wifi_switch.setImageResource(R.drawable.wifi_not_connected_pressed);
    }
    sendRequest();
}

@Override
protected void onPause() {
    isProcessing = false;
    super.onPause();
}

@Override
public void onClick(View v) {
    int id = v.getId();
    switch (id) {
        case R.id.btn1:
        case R.id.tgl_num1:
            switchMode(1);
            btn1.setBackgroundResource(R.drawable.tune_on);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_off);
            btn_num1.setBackgroundResource(R.drawable.orange1);
            btn_num2.setBackgroundResource(R.drawable.grey2);
            btn_num3.setBackgroundResource(R.drawable.grey3);
            btn_num4.setBackgroundResource(R.drawable.grey4);
            btn_num5.setBackgroundResource(R.drawable.grey5);
            break;
        case R.id.btn2:
        case R.id.tgl_num2:
            switchMode(2);
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_on);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_off);
            btn_num1.setBackgroundResource(R.drawable.grey1);
            btn_num2.setBackgroundResource(R.drawable.orange2);
            btn_num3.setBackgroundResource(R.drawable.grey3);
            btn_num4.setBackgroundResource(R.drawable.grey4);
            btn_num5.setBackgroundResource(R.drawable.grey5);
            break;
        case R.id.btn3:
        case R.id.tgl_num3:
            switchMode(3);
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_on);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_off);
            btn_num1.setBackgroundResource(R.drawable.grey1);
            btn_num2.setBackgroundResource(R.drawable.grey2);
            btn_num3.setBackgroundResource(R.drawable.orange3);
            btn_num4.setBackgroundResource(R.drawable.grey4);
            btn_num5.setBackgroundResource(R.drawable.grey5);
            break;
        case R.id.btn4:
        case R.id.tgl_num4:
            switchMode(4);
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_on);
            btn5.setBackgroundResource(R.drawable.tune_off);
            btn_num1.setBackgroundResource(R.drawable.grey1);
            btn_num2.setBackgroundResource(R.drawable.grey2);
            btn_num3.setBackgroundResource(R.drawable.grey3);
            btn_num4.setBackgroundResource(R.drawable.orange4);
            btn_num5.setBackgroundResource(R.drawable.grey5);
            break;
        case R.id.btn5:
        case R.id.tgl_num5:
            switchMode(5);
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_on);
            btn_num1.setBackgroundResource(R.drawable.grey1);
            btn_num2.setBackgroundResource(R.drawable.grey2);
            btn_num3.setBackgroundResource(R.drawable.grey3);
            btn_num4.setBackgroundResource(R.drawable.grey4);
            btn_num5.setBackgroundResource(R.drawable.orange5);
            break;
        case R.id.wifi_switch:
            displayDeviceInfo();
            break;
        case R.id.btn_home:
            startActivity(new Intent(TuneActivity.this, MainActivity.class));
            break;
    }
}

void setTuneMode() {
    Log.d("Response", " " + tuneMode);
    switch (tuneMode) {
        case 1:
            btn1.setBackgroundResource(R.drawable.tune_on);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_off);
            break;
        case 2:
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_on);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_off);
            break;
        case 3:
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_on);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_off);
            break;
        case 4:
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_on);
            btn5.setBackgroundResource(R.drawable.tune_off);
            break;
        case 5:
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_on);
            break;
        default:
            btn1.setBackgroundResource(R.drawable.tune_off);
            btn2.setBackgroundResource(R.drawable.tune_off);
            btn3.setBackgroundResource(R.drawable.tune_off);
            btn4.setBackgroundResource(R.drawable.tune_off);
            btn5.setBackgroundResource(R.drawable.tune_off);
    }
}

@Override
public boolean onSupportNavigateUp() {
    finish();
    return true;
}


//Send to sGDP server to verify connection
public void sendRequest() {
    if(isProcessing) {
        // prepare the Request
        JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        isConnected = true;
                        wifi_switch.setImageResource(R.drawable.wifi_pressed);
                        try {
                            JSONObject variables = response.getJSONObject("variables");
                            Log.d("TEST2 ", variables.toString());
                            tuneMode = variables.getInt("tune_mode");
                            String deviceName = response.getString("name");
                            deviceName += response.getString("id");
                            device = deviceName;
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        // display response
                        Log.d("Response", response.toString());
                        setTuneMode();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        isConnected = false;
                        wifi_switch.setImageResource(R.drawable.wifi_not_connected_pressed);
                        Log.d("Error.Response", error.toString());

                        new SweetAlertDialog(TuneActivity.this, SweetAlertDialog.WARNING_TYPE)
                                .setTitleText("No Connection")
                                .setContentText("Your are not connected to GDP device")
                                .setCancelText("Cancel")
                                .setConfirmText("Connect")
                                .showCancelButton(true)
                                .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                                    @Override
                                    public void onClick(SweetAlertDialog sDialog) {
                                        sDialog.dismiss();
                                    }
                                })
                                .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                                    @Override
                                    public void onClick(SweetAlertDialog sDialog) {
                                        startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                                    }
                                })
                                .show();
                    }
                }
        );
        // add it to the RequestQueue
        queue.add(getRequest);
    } else {
        finish();
    }
}

void switchMode(int mode) {
    // prepare the Request
    JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url + "/change_mode?params=" + mode, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    isConnected = true;
                    wifi_switch.setImageResource(R.drawable.wifi_pressed);
                    try {

                        tuneMode = response.getInt("return_value");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    // display response
                    Log.d("Response", response.toString());
                    setTuneMode();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    isConnected = false;
                    wifi_switch.setImageResource(R.drawable.wifi_not_connected_pressed);
                    Log.d("Error.Response", error.toString());

                    new SweetAlertDialog(TuneActivity.this, SweetAlertDialog.WARNING_TYPE)
                            .setTitleText("No Connection")
                            .setContentText("Your are not connected to GDP device")
                            .setCancelText("Cancel")
                            .setConfirmText("Connect")
                            .showCancelButton(true)
                            .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                                @Override
                                public void onClick(SweetAlertDialog sDialog) {
                                    sDialog.dismiss();
                                }
                            })
                            .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                                @Override
                                public void onClick(SweetAlertDialog sDialog) {
                                    startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                                }
                            })
                            .show();
                }
            }
    );
    // add it to the RequestQueue
    queue.add(getRequest);

}

//Show Connection details
void displayDeviceInfo() {
    if (isProcessing) {
        if (isConnected) {
            new SweetAlertDialog(this, SweetAlertDialog.SUCCESS_TYPE)
                    .setTitleText("Connected")
                    .setContentText("You are connected to " + device)
                    .setConfirmText("ok")
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sDialog) {
                            // reuse previous dialog instance
                            sDialog.dismiss();
                        }
                    })
                    .show();
        } else {
            new SweetAlertDialog(this, SweetAlertDialog.WARNING_TYPE)
                    .setTitleText("No Connection")
                    .setContentText("Your are not connected to GDP device")
                    .setCancelText("Cancel")
                    .setConfirmText("Connect")
                    .showCancelButton(true)
                    .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sDialog) {
                            sDialog.dismiss();
                        }
                    })
                    .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                        @Override
                        public void onClick(SweetAlertDialog sDialog) {
                            startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                        }
                    })
                    .show();
        }

    }
}
 }

再次,这是我最大的问题,我想首先解决这个问题,但也欢迎其他更正。

0 个答案:

没有答案