2016-04-02 17 views
0

私はAsyncHttpClientクラスを使用しています。その結果をOnSuccess関数内の文字列として保存することはできません。以下は、解析する結果の例です。私は "lsoa"値を取得しようとしています。 Android Postcodes.io HTTPリクエスト

{ 
"status" : 200, 
"result" : { 
    "postcode" : "NW2 1SJ", 
    "quality" : 1, 
    "eastings" : 524332, 
    "northings" : 186558, 
    "country" : "England", 
    "nhs_ha" : "London", 
    "longitude" : -0.207661046004569, 
    "latitude" : 51.5642021415348, 
    "parliamentary_constituency" : "Finchley and Golders Green", 
    "european_electoral_region" : "London", 
    "primary_care_trust" : "Barnet", 
    "region" : "London", 
    "lsoa" : "Barnet 040A", 
    "msoa" : "Barnet 040", 
    "incode" : "1SJ", 
    "outcode" : "NW2", 
    "admin_district" : "Barnet", 
    "parish" : "Barnet, unparished area", 
    "admin_county" : null, 
    "admin_ward" : "Childs Hill", 
    "ccg" : "NHS Barnet", 
    "nuts" : "Barnet", 
    "codes" : { 
     "admin_district" : "E09000003", 
     "admin_county" : "E99999999", 
     "admin_ward" : "E05000045", 
     "parish" : "E43000193", 
     "ccg" : "E38000005", 
     "nuts" : "UKI71" 
    } 
} 

私がやりたいすべての

は、文字列(複数可)にAPIから「lsoa」を格納しているが、私は得るとして私も文字列に全体の出力を割り当てることができません」 変数「sの'内部クラスからアクセスされ、最終的に宣言する必要があります "エラーが発生しました。

private void queryPostcodes(String searchString){ 

     String s; 
     // Create a client to perform API request 
     AsyncHttpClient client = new AsyncHttpClient(); 

     mDialog.show(); 

     // Output the link being checked 
     Log.d("Gentrification: ", QUERY_URL + searchString); 

     // Have the client get a JSONArray of data and define how to respond 
     client.get(QUERY_URL + searchString, new JsonHttpResponseHandler(){ 

      @Override 
      public void onSuccess(JSONObject jsonObject){ 
       mDialog.dismiss(); 
       Log.d("X: ", jsonObject.toString()); 
       s = jsonObject.toString(); //<-- DOESN'T WORK :(
      } 

      @Override 
      public void onFailure(int statusCode, Throwable throwable, JSONObject error){ 
       mDialog.dismiss(); 
       Toast.makeText(getApplicationContext(), "Error: " + statusCode + " " + throwable.getMessage() + " - Postcode not found", Toast.LENGTH_LONG).show(); 
       Log.e("X", statusCode + " " + throwable.getMessage()); 

      } 
     }); 
    } 

ご協力いただければ幸いです。あなたはAltキーを押し+ AndroidStudioに入力しようとした場合

+0

んこの作品? 'Log.d(" Gentrification: "、jsonObject.toString());もしそうなら、それも動作します。とにかく –

+0

、あなたはどういうことを知っています、それはうまくいきませんか? 'String s'の値はどこで使用されていますか? –

+0

Log.d( "Gentrification:"、jsonObject.toString()); 上記の行が動作し、出力が見えます。 変数 'の内部クラスからのアクセスエラーのため、現時点で私のアプリケーションをコンパイルできません:( –

答えて

0

、あなたはクイックフィックスのオプションを取得します:「1つの要素の配列「に 『s』を変形クリックして、出来上がり

の問題の理由はnew JsonHttpResponseHandler()をということです。内部からアクセスするすべてのものは、親クラスのフィールドまたはメソッドを格納する最終変数として宣言する必要があります。一方、最終変数が取得するため、Stringをfinalにすることはできません。 1つのStringパラメータでラッパークラスを作成するか、親クラスのフィールドを作成するか、String []をラッパーとして使用します。

文字列ラッパーオプション:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final StringBuffer stringBuffer = new StringBuffer(); 
     Button updateButton = (Button) findViewById(R.id.update); 
     updateButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       stringBuffer 
         .delete(0, stringBuffer.length()) 
         .append(System.currentTimeMillis()); 
      } 
     }); 
    } 
} 

親オプションのフィールド:

public class MainActivity extends AppCompatActivity { 

    private String s; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button updateButton = (Button) findViewById(R.id.update); 
     updateButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       s = String.valueOf(System.currentTimeMillis()); 
      } 
     }); 
    } 
} 

がString []オプション:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final String[] s = new String[1]; 
     Button updateButton = (Button) findViewById(R.id.update); 
     updateButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       s[0] = String.valueOf(System.currentTimeMillis()); 
      } 
     }); 
    } 
}