2012-03-29 8 views
-1

私はrequest.responseを呼び出すことができるように、別の方法でローカル変数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 { 
      HttpResponse response = client.execute(request); 
      Toast.makeText(MenuUtama.this, request(response) ,Toast.LENGTH_SHORT).show(); 

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

    } 
}); 
} 

を持っています。全く別の方法からこのローカルメソッドにどのようにアクセスできますか?

+0

リクエスト(レスポンス)はどのように可変ですか?? –

+0

あなたのスニップで '要求(応答)'は変数ではありません。さまざまなオプションが存在するが、スレッドセーフなどの問題が発生する可能性があるため、達成しようとしていることは何ですか? – radimpe

+0

aijとradimpeが指摘しているように、要求(応答)は変数ではありません。とにかく、他のメソッドから変数を参照する場合は、その変数をインスタンス変数として作成します。たとえば、ブロック外のクラスでその変数を宣言することができます。 –

答えて

1

レスポンスの変数の範囲を広げてリクエストすると、これらの変数はメソッドレベルではなくクラスレベルで宣言されます。

+1

コードスニップは、OPがマルチスレッド環境でこれを実行したいことを示唆しています。クラス変数に '要求 'のようなものを保存しても問題は起こりませんか? – radimpe

0

関数内でローカル変数として宣言された変数は呼び出せません。あなたはクラスの外からのものにアクセスしたい場合は、あなたがクラスのオブジェクトを作成し、

A a = new A(); 
//now you can call a.request or a.response 
を次のように呼び出す必要がありますように、

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. 
    } 
} 

を次のようにそれを行うことができます

しかし、変数のアクセス指定子でこれを可能にする必要があることに注意してください。

0

私はあなたが探しているものだと思うが、これらの線に沿って何かである:

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(); 
      } 
     } 
    }); 
} 

明らかにプライベートインスタンス変数にアクセサを使用できれrequest(response)は、可能myRequestの名前を変更するためにうまくいくものは何でもクラスにObjectを変更し、むしろ、それを保護して直接割り当てるのではなく、request(response)というメソッド呼び出しの値を保持するためにインスタンス変数が必要であることがわかります。

0

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. 
    } 
}