Как я могу использовать локальную переменную метода в совершенно другом методе? - PullRequest
0 голосов
/ 29 марта 2012

У меня есть метод, написанный следующим образом ...

public void getRequest(String Url) {

runOnUiThread(new Runnable() {
    public void run() {
        // TODO Auto-generated method stub

        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        try {
            HttpResponse response = client.execute(request);
            Toast.makeText(MenuUtama.this, request(response) ,Toast.LENGTH_SHORT).show();

        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
});
}

Мне нужно иметь доступ к локальной переменной request в другом методе, чтобы я мог вызвать request.response. Как я могу получить доступ к этому локальному методу из совершенно другого метода?

Ответы [ 4 ]

1 голос
/ 29 марта 2012

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

0 голосов
/ 09 мая 2012

вы должны объявить вашу переменную response в области действия класса.вот ваш код.

public class YourClass{

    //Declare your request varible in a class-level scope
    //so it can be accessed by any method
    HttpGet request;


    public void getRequest(String Url) {

        runOnUiThread(new Runnable() {
            public void run() {
                 // TODO Auto-generated method stub

                HttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet(url);
                try {
                    response = client.execute(request);
                    Toast.makeText(MenuUtama.this, request(response) ,Toast.LENGTH_SHORT).show();

                } catch (Exception ex) {
                ex.printStackTrace();
                }

            }
        });
    }

    public void otherMthod(){
        System.out.println(request); //request variable is accessible in this scope.
    }
}
0 голосов
/ 29 марта 2012

Я думаю, что вы ищете что-то вроде этого:

protected Object myRequest;

public void getRequest(String Url) {
    runOnUiThread(new Runnable() {
        public void run() {
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet(url);
            try {
                HttpResponse response = client.execute(request);
                myRequest = request(response);
                Toast.makeText(MenuUtama.this, myRequest, Toast.LENGTH_SHORT).show();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    });
}

Очевидно, измените Object на любой класс request(response), переименуйте myRequest и предпочтительно используйтесредства доступа к закрытой переменной экземпляра вместо того, чтобы делать ее защищенной и назначать напрямую, но, надеюсь, вы понимаете, что вам нужна переменная экземпляра для хранения значения вашего вызова метода request(response).

0 голосов
/ 29 марта 2012

Вы не можете вызывать любую переменную, объявленную как локальную переменную внутри любой функции. Вы можете сделать это следующим образом

public class A{
    HttpGet request;
        HttpResponse response;
    void methodA(){
          request = //........
           response = //...........
    }
    void methodB{
        //here you can refer to request and response as they are the instance variables of the class.
    }
}

Если вы хотите получить доступ к ним извне класса, вам нужно создать объект класса A , а затем вызвать следующим образом

A a = new A();
//now you can call a.request or a.response

Но помните, что спецификаторы доступа к переменным должны позволять вам делать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...