2017-01-16 11 views
-3

私のRecyclerViewはビューをスキップし、最初にロードします。スクロールしてバックアップするまで、すべてのビューをアレイ内の同じオブジェクトにしてから表示します。私はそれが働くので、問題が表示されません、それはちょうどそれが必要なように動作しません。私はVolleyを使ってネットワークコールを行っています。私が見ることができるものから、RecyclerViewは最初のいくつかのビューをスキップします

public class ForecastActivity extends AppCompatActivity { 

    RecyclerView recyclerView; 
    ListAdapter listAdapter; 

    RequestQueue requestQueue; 
    JSONParser jsonParser = JSONParser.getJsonParser(); 
    ForecastListItem[] mArrayList; 


    TextView mForecastCityandCountyText; 
    String mForecastCityandContryString; 
    String mForecastCityNameString; 
    String mForecastCountryString; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_forcast); 
     initializeUI(); 
     requestQueue = Volley.newRequestQueue(this); 
     netWorkRequest(); 
    } 


    public void initializeUI() { 
     mForecastCityandCountyText = (TextView) findViewById(R.id.ForecastCityName); 
     recyclerView = (RecyclerView) findViewById(R.id.Recylerviewlayout); 
     listAdapter = new ListAdapter(); 
     recyclerView.setAdapter(listAdapter); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 
     mArrayList = new ForecastListItem[10]; 
     mArrayList[0] = new ForecastListItem(); 
     mArrayList[1] = new ForecastListItem(); 
     mArrayList[2] = new ForecastListItem(); 
     mArrayList[3] = new ForecastListItem(); 
     mArrayList[4] = new ForecastListItem(); 
     mArrayList[5] = new ForecastListItem(); 
     mArrayList[6] = new ForecastListItem(); 
     mArrayList[7] = new ForecastListItem(); 
     mArrayList[8] = new ForecastListItem(); 
     mArrayList[9] = new ForecastListItem(); 
    } 


    public void netWorkRequest() { 
     JsonObjectRequest JsonObjectRequest = new JsonObjectRequest(Request.Method.GET, jsonParser.getForecastUrl(), null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 

       try { 
        String UniverSalIconString; 
        Log.d(jsonParser.getForecastUrl(), ""); 

        JSONObject mJsonCityObject = response.getJSONObject("city"); 
        Log.d("here is the object", mJsonCityObject.toString()); 

        mForecastCityNameString = jsonParser.getString("name", mJsonCityObject); 
        mForecastCountryString = jsonParser.getString("country", mJsonCityObject); 
        mForecastCityandContryString = mForecastCityNameString + "," + mForecastCountryString; 
        mForecastCityandCountyText.setText(mForecastCityandContryString); 

        //********************************************************************************************************************************************* 
        // add all the information to arraylist so i can be processed by recycler view 
        // add refresh button 
        JSONArray JsonListArray = jsonParser.getJSONArray("list", response); 

        JSONObject Day1 = jsonParser.getJSONObject(0, JsonListArray); 
        JSONObject TempObj = jsonParser.getJSONObject("temp", Day1); 
        mArrayList[0].setmForecastTempDouble(jsonParser.getDouble("day", TempObj)); 
        JSONArray JsonDay1WeatherArray = jsonParser.getJSONArray("weather", Day1); 
        JSONObject Day1WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay1WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day1WeatherJsonObject); 
        mArrayList[0].setmForecastDescriptionString(jsonParser.getString("description", Day1WeatherJsonObject)); 
        mArrayList[0].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[0].setMYNUMBER(1); 
        UniverSalIconString = null; 


        JSONObject Day2 = jsonParser.getJSONObject(1, JsonListArray); 
        JSONObject TempObj2 = jsonParser.getJSONObject("temp", Day2); 
        mArrayList[1].setmForecastTempDouble(jsonParser.getDouble("day", TempObj2)); 
        JSONArray JsonDay2WeatherArray = jsonParser.getJSONArray("weather", Day2); 
        JSONObject Day2WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay2WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day2WeatherJsonObject); 
        mArrayList[1].setmForecastDescriptionString(jsonParser.getString("description", Day2WeatherJsonObject)); 
        mArrayList[1].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[1].setMYNUMBER(2); 
        UniverSalIconString = null; 


        JSONObject Day3 = jsonParser.getJSONObject(2, JsonListArray); 
        JSONObject TempObj3 = jsonParser.getJSONObject("temp", Day3); 
        mArrayList[2].setmForecastTempDouble(jsonParser.getDouble("day", TempObj3)); 
        JSONArray JsonDay3WeatherArray = jsonParser.getJSONArray("weather", Day3); 
        JSONObject Day3WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay3WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day3WeatherJsonObject); 
        mArrayList[2].setmForecastDescriptionString(jsonParser.getString("description", Day3WeatherJsonObject)); 
        mArrayList[2].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[2].setMYNUMBER(3); 
        UniverSalIconString = null; 


        JSONObject Day4 = jsonParser.getJSONObject(3, JsonListArray); 
        JSONObject TempObj4 = jsonParser.getJSONObject("temp", Day4); 
        mArrayList[3].setmForecastTempDouble(jsonParser.getDouble("day", TempObj4)); 
        JSONArray JsonDay4WeatherArray = jsonParser.getJSONArray("weather", Day4); 
        JSONObject Day4WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay4WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day4WeatherJsonObject); 
        mArrayList[3].setmForecastDescriptionString(jsonParser.getString("description", Day4WeatherJsonObject)); 
        mArrayList[3].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[3].setMYNUMBER(4); 
        UniverSalIconString = null; 


        JSONObject Day5 = jsonParser.getJSONObject(4, JsonListArray); 
        JSONObject TempObj5 = jsonParser.getJSONObject("temp", Day5); 
        mArrayList[4].setmForecastTempDouble(jsonParser.getDouble("day", TempObj5)); 
        JSONArray JsonDay5WeatherArray = jsonParser.getJSONArray("weather", Day5); 
        JSONObject Day5WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay5WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day5WeatherJsonObject); 
        mArrayList[4].setmForecastDescriptionString(jsonParser.getString("description", Day5WeatherJsonObject)); 
        mArrayList[4].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[4].setMYNUMBER(5); 
        UniverSalIconString = null; 


        JSONObject Day6 = jsonParser.getJSONObject(5, JsonListArray); 
        JSONObject TempObj6 = jsonParser.getJSONObject("temp", Day6); 
        mArrayList[5].setmForecastTempDouble(jsonParser.getDouble("day", TempObj6)); 
        JSONArray JsonDay6WeatherArray = jsonParser.getJSONArray("weather", Day6); 
        JSONObject Day6WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay6WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day6WeatherJsonObject); 
        mArrayList[5].setmForecastDescriptionString(jsonParser.getString("description", Day6WeatherJsonObject)); 
        mArrayList[5].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[5].setMYNUMBER(6); 
        UniverSalIconString = null; 


        JSONObject Day7 = jsonParser.getJSONObject(6, JsonListArray); 
        JSONObject TempObj7 = jsonParser.getJSONObject("temp", Day7); 
        mArrayList[6].setmForecastTempDouble(jsonParser.getDouble("day", TempObj7)); 
        JSONArray JsonDay7WeatherArray = jsonParser.getJSONArray("weather", Day7); 
        JSONObject Day7WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay7WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day7WeatherJsonObject); 
        mArrayList[6].setmForecastDescriptionString(jsonParser.getString("description", Day7WeatherJsonObject)); 
        mArrayList[6].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[6].setMYNUMBER(7); 
        UniverSalIconString = null; 


        JSONObject Day8 = jsonParser.getJSONObject(7, JsonListArray); 
        JSONObject TempObj8 = jsonParser.getJSONObject("temp", Day8); 
        mArrayList[7].setmForecastTempDouble(jsonParser.getDouble("day", TempObj8)); 
        JSONArray JsonDay8WeatherArray = jsonParser.getJSONArray("weather", Day8); 
        JSONObject Day8WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay8WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day8WeatherJsonObject); 
        mArrayList[7].setmForecastDescriptionString(jsonParser.getString("description", Day8WeatherJsonObject)); 
        mArrayList[7].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[7].setMYNUMBER(8); 
        UniverSalIconString = null; 


        JSONObject Day9 = jsonParser.getJSONObject(8, JsonListArray); 
        JSONObject TempObj9 = jsonParser.getJSONObject("temp", Day9); 
        mArrayList[8].setmForecastTempDouble(jsonParser.getDouble("day", TempObj9)); 
        JSONArray JsonDay9WeatherArray = jsonParser.getJSONArray("weather", Day9); 
        JSONObject Day9WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay9WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day9WeatherJsonObject); 
        mArrayList[8].setmForecastDescriptionString(jsonParser.getString("description", Day9WeatherJsonObject)); 
        mArrayList[8].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[8].setMYNUMBER(9); 
        UniverSalIconString = null; 


        JSONObject Day10 = jsonParser.getJSONObject(9, JsonListArray); 
        JSONObject TempObj10 = jsonParser.getJSONObject("temp", Day10); 
        mArrayList[9].setmForecastTempDouble(jsonParser.getDouble("day", TempObj10)); 
        JSONArray JsonDay10WeatherArray = jsonParser.getJSONArray("weather", Day10); 
        JSONObject Day10WeatherJsonObject = jsonParser.getJSONObject(0, JsonDay10WeatherArray); 
        UniverSalIconString = jsonParser.getString("icon", Day10WeatherJsonObject); 
        mArrayList[9].setmForecastDescriptionString(jsonParser.getString("description", Day10WeatherJsonObject)); 
        mArrayList[9].setmForecastIconUrl(jsonParser.getCurrentWeatherIconUrl(UniverSalIconString)); 
        mArrayList[9].setMYNUMBER(10); 
        UniverSalIconString = null; 

       } catch (JSONException e) { 
        e.printStackTrace(); 

       } 


      } 

     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }); 

     requestQueue.add(JsonObjectRequest); 
    } 
    class ListHolder extends RecyclerView.ViewHolder { 
     TextView DescriptionText; 
     TextView TempText; 
     TextView DateText; 
     NetworkImageView ForecastIconImageView; 

     ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { 
      LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(10); 

      @Override 
      public Bitmap getBitmap(String url) { 
       return cache.get(url); 
      } 

      @Override 
      public void putBitmap(String url, Bitmap bitmap) { 
       cache.put(url, bitmap); 
      } 
     }); 


     public ListHolder(View itemView) { 
      super(itemView); 
      DescriptionText = (TextView) itemView.findViewById(R.id.ForcastWeatherDescriptionText); 
      TempText = (TextView) itemView.findViewById(R.id.ForecastWeatherTempText); 
      ForecastIconImageView = (NetworkImageView) itemView.findViewById(R.id.ForecastWeatherIconImageview); 

      // DateText = (TextView) itemView.findViewById(R.id.DateText); 
     } 


     void OnBind(ForecastListItem item) { 


      DescriptionText.setText(item.getmForecastDescriptionString()); 
      TempText.setText(Integer.toString(item.getmForecastTempDouble())); 
//   DateText.setText(item.getmForecastDateString()); 
      ForecastIconImageView.setImageUrl(item.getmForecastIconUrl(), imageLoader); 

     } 


    } 


    class ListAdapter extends RecyclerView.Adapter<ListHolder> { 


     @Override 
     public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

      ListHolder listHolder = new ListHolder(getLayoutInflater().inflate(R.layout.forecast_item_view, parent, false)); 
      return listHolder; 
     } 

     @Override 
     public void onBindViewHolder(ListHolder holder, int position) { 

      Log.d("ARRAY NUM", Integer.toString(mArrayList[position].getMYNUMBER())); 
      holder.OnBind(mArrayList[position]); 

      // send the array to ViewHolder to set up the UI 


     } 

     @Override 
     public int getItemCount() { 


      return mArrayList.length; 
     } 
    } 
+0

コードのほとんどは、私はちょうど誰かが私viewholderクラスとアダプタを見て、彼らはそれはあなたがあなたの 'RecyclerView'アダプタを設定しているという事実とは何かを持っているかもしれません何か問題 –

+0

を見るかどうかを確認したいと同じですネットワーク通話を行う前に – Pztar

+0

ようこそスタックオーバーフロー!良い質問をするので、良い答えを得るためにあなたを助けるために私たちの[SO質問チェックリスト](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)を確認してください。 –

答えて

0

、あなたは、あなたがデータをフェッチし、データの元のArrayListを更新するためのネットワーク要求をキックオフ、いくつかのプレースホルダデータ(mArrayList)を使用して、アダプタを初期化します。

もっと良い方法は、最初に空のリストを表示してから、データをダウンロードして実際にリストに表示することです。

また、データをダウンロードするときはListAdapternotifyDataSetChangedと呼んで、元のデータが変更されたことを通知する必要があります。

Webサービスが非同期であるため、呼び出しが完了するまですぐに戻りません。

あなたは、あなたのListAdapterのコンストラクタにmArrayList変数を引き渡してそこに参照することができます。次に、アダプタにメソッドを追加します。

public void updateForcastData(ArrayList<ForecastListItem> newData) { 
    //insert new data into your field here 
    notifyDataSetChanged(); //consider using one of the other methods like notifyItemInserted() etc either 
} 
+0

これで、クラスファイルの汎用フィールド変数を使用していたので、どこに配置しますか? –

+0

あなたのListAdapterのためのカスタムコンストラクタ? – FrankR

+0

いいえ、私は1つも作成しませんでした –

関連する問題