Залп для чтения WAN IP и положить в переменную - PullRequest
0 голосов
/ 09 октября 2019

я пытаюсь создать приложение, которое работает только тогда, когда клиент подключен к моей сети.

, так как методы подключения могут быть через Wi-Fi или VPN, я решил проверить IP-адрес wan сети. Поэтому я доверил себя библиотеке залпа для этого и странице amazon, которая возвращает ip wan.

это мой класс:

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    public final Variabiles vv = new Variabiles();
    public String op = "";
    public EditText psw=null;
    public Button checkpsw=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main);


        psw = (EditText) findViewById(R.id.editText);
        checkpsw = (Button) findViewById(R.id.button);
        checkpsw.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {

        RequestQueue queue = Volley.newRequestQueue(this);
        String url ="http://checkip.amazonaws.com/";

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        vv.setIp(response);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                vv.setIp( "error");
            }
        });

        queue.add(stringRequest);

        op = vv.getIp();
        if (op == "xxx.xxx.xxx.xxx") {
            if (psw.getText().toString().equals("test")) {
                Intent intent = new Intent(MainActivity.this, panel.class);
                startActivity(intent);
            }
        }
    }


}

это работает на полпути, потому что с отладкой яобратите внимание, что в

            public void onResponse(String response) {
                vv.setIp(response);
            }

адрес распознается и устанавливается для переменной в классе, который я использую в качестве контейнера переменных. но вне stringRequest все переменные пусты, и я не понимаю, почему или где я не прав ..

в чем ошибка?

...