2017-02-12 3 views
0

私はこのメソッドを "invokeWS"と呼んでいます。私がしたいのは、JSONファイルからデータを取得するリストデータArrayListで私のアプリで使用するArrayAdapterアダプタ2を更新することだけです。私は別のものを試しました。AsyncHttpClient LoopJとonSuccessメソッドのデータを保存する

  • するonSuccessは無効となりますので、私はメインプログラムに何かを返すことはできません。私は試しに入るのが良いです、JSONが解析され、私はコンソールで欲しい文字列を見ることができますが、私がonSuccessから出てすぐに、私は空のArraylistを取得します。したがって、リストデータを返すときは空です。
  • もlistDataプロパティがONSUCCESS
  • にもするonSuccessの内側に更新するArrayAdapterのアダプタ2を作ってみました
  • あるところはどこでもそうでない場合は、「内部クラスからアクセス」のエラーが表示されます、「最終」listDataプロパティを宣言していたがために動作しませんでしたそれは範囲外であると言われています。
  • 私はonFinishメソッドを実装しようとしていましたが、JSONが奇妙な理由で解析される前に呼び出されていました。

    public static ArrayList<String> invokeWS() { 
    AsyncHttpClient client = new AsyncHttpClient(); 
    final ArrayList<String> listdata = new ArrayList<String>(); 
    client.get("http://xxx.xxx.xxx.xxx:8085/CompanyJersWS/company/showcompany", new JsonHttpResponseHandler() { //address to be specified each time, using external IP address 
    
    
          @Override 
          public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 
           System.out.println("Inside Success invokeWS"); 
           try { 
            JSONArray json = response.getJSONArray("Companies"); 
            System.out.println("JSON is parsed!" +json.toString() + "Length is " + json.length()); 
            System.out.println("First value is " + json.getString(0)); 
            int i; 
            for (i=0;i<json.length();i++) 
             listdata.add(json.getString(i)); 
            System.out.println("Listdata contains" +listdata); 
    
    
           } catch (Exception e) { 
            System.out.println("FAILED invokeWS"); 
            e.printStackTrace(); 
           } 
          } 
         } 
    
    
    
    ); 
    
    System.out.println("Listdata out of scope contains" +listdata); 
    
    return listdata; 
    
    } 
    

    これは、メインクラスからinvokeWS()を呼び出す方法です。

    ArrayList<String> tempval = invokeWS(); 
    

    これはメインクラスで書かれたアダプター2で、これはコンテンツとしてjsonファイルのリストデータを持ちたいと思っています。読書のための

    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, 
         android.R.layout.simple_spinner_item, tempval.toArray(new String[tempval.size()])); 
    sp1.setAdapter(adapter2); 
    

ありがとう!

@Override 
     public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 
      System.out.println("Inside Success invokeWS"); 
      try { 
       JSONArray json = response.getJSONArray("Companies"); 
       System.out.println("JSON is parsed!" +json.toString() + "Length is " + json.length()); 
       System.out.println("First value is " + json.getString(0)); 
       int i; 
       for (i=0;i<json.length();i++){ 
        listdata.add(json.getString(i)); 
       } 
      System.out.println("Listdata contains" +listdata); 
      refreshData(listdata); 
      } catch (Exception e) { 
       System.out.println("FAILED invokeWS"); 
       e.printStackTrace(); 
      } 

     } 

そして更新するために、その機能を使用:するonSuccessは、あなたが関数のパラメータ(例えば、ための「refreshdataを」)のように作成する「listDataプロパティ」を渡した後、あなたが行うことができます

答えて

0

何かが、あります新しいリストの配列:

public void refreshData(ArrayList<String> listdata){ 
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, 
    android.R.layout.simple_spinner_item, listdata); 
    sp1.setAdapter(adapter2); 

} 
+0

ありがとうございますが、私はあなたが提案したソリューションに問題があります! –

+0

気にしないでください! ありがとうございます!私はまた、sp1をもう一度初期化しなければなりませんでした。そうでなければ、範囲外でしたが、良いアイデアでした! スピナーsp1 =(スピナー)findViewById(R.id.spinner2); –

+0

Nice !, you're welcome =) – Diekrul

関連する問題