2016-08-30 28 views
1

URLからJSONデータを取得してRecyclerViewに表示するアンドロイドアプリを作っています。アンドロイドでjsonからデータを取得し、RecyclerViewに表示する方法は?

私のJSONデータ

[{"email":"[email protected]","photo":"http:\/\/www.example.com\/x.jpg","bookname":"one","price":"30","num":"3","avg":"3.9","author":"none"}]

だけbooknamephotoキーの値がフェッチされています。他のパラメータは空ですが、それが間違っている場合でもbooknameをフェッチしないでください。

私のコードは次のとおりです。

public class dashBoard extends AppCompatActivity { 


    private List<myDash> dash; 
    private Toolbar mToolbar; 
    Button read; 
    //Creating Views 
    int temp=0; 
    float starts=0; 
    private RecyclerView recyclerView; 
    private RecyclerView.LayoutManager layoutManager; 
    private RecyclerView.Adapter adapter; 
    public String ratenumS,numberS; 
    public String bookName,price,rating; 
    private RequestQueue requestQueue; 
    String mail_one; 

    private int requestCount = 1; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dash_bord); 

     recyclerView.setHasFixedSize(true); 
     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 

     //Initializing our superheroes list 
     dash = new ArrayList<>(); 
     requestQueue = Volley.newRequestQueue(this); 

     getDash(); 

     //Adding an scroll change listener to recyclerview 
     recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { 
      @Override 
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
       super.onScrollStateChanged(recyclerView, newState); 

       getDash(); 
      } 
     }); 

     //initializing our adapter 
     adapter = new dashCard(dash, this); 

     //Adding adapter to recyclerview 
     recyclerView.setAdapter(adapter); 


    } 


    private JsonArrayRequest getDataFromDash(int requestCount) { 
     //Initializing ProgressBar 
     final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar3); 

     //Displaying Progressbar 
     progressBar.setVisibility(View.VISIBLE); 
     setProgressBarIndeterminateVisibility(true); 

     SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(dashBoard.this); 

     mail_one = pre.getString("mail2", "DEFAULT VALUE"); 

     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest("http://www.example.com/getDash.php?page="+ String.valueOf(requestCount)+"&email="+mail_one, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         //Calling method parseData to parse the json response 
         parseData(response); 
         //Hiding the progressbar 
         progressBar.setVisibility(View.GONE); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         progressBar.setVisibility(View.GONE); 



         if(temp==0) { 
          Toast.makeText(dashBoard.this, "No More Items Available "+bookName+"book "+price+" "+ratenumS+"  "+numberS+" "+mail_one, Toast.LENGTH_SHORT).show(); 
          temp++; 
         } 
        } 

       } 

     //Returning the request 
     return jsonArrayRequest; 
    } 

    private void getDash() { 
     //Adding the method to the queue by calling the method getDataFromServer 
     requestQueue.add(getDataFromDash(requestCount)); 
     //Incrementing the request counter 
     requestCount++; 
    } 

    //This method will parse json data 
    private void parseData(JSONArray array) { 
     for (int i = 0; i < array.length(); i++) { 
      myDash dash1 = new myDash(); 



      JSONObject json = null; 
      try { 
       //Getting json 
       json = array.getJSONObject(i); 

       dash1.setImageUrl(json.getString("photo")); 
       dash1.setBook_name(json.getString("bookname")); 
       dash1.setNo_down(json.getString("download")); 
       dash1.setBook_price(json.getString("price")); 
       dash1.setStar_num(json.getString("num")); 
       dash1.setAvg_rate(Float.parseFloat(json.getString("avg"))); 


      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      //Adding the superhero object to the list 
      dash.add(dash1); 
     } 

     //Notifying the adapter that data has been added or changed 
     adapter.notifyDataSetChanged(); 
    } 

誰もが、このコードが動作しない理由を任意のアイデアを持っていますか?

私のdashCardアクティビティ。

dash1.setNo_down(json.getString("download")); 

あなたのJSONは、get値のキーをダウンロードしていない:

public class dashCard extends RecyclerView.Adapter<dashCard.ViewHolder> { 


    private ImageLoader imageLoader; 
    private Context context; 

    //List to store all superheroes 
    List<myDash> secDash1; 

    //Constructor of this class 
    public dashCard(List<myDash> secDash1, Context context){ 
     super(); 
     //Getting all superheroes 
     this.secDash1 = secDash1; 
     this.context = context; 
    } 

    //In 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.dash_bord, parent, false); 
     ViewHolder viewHolder = new ViewHolder(v); 

     return viewHolder; 

    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     final myDash secDash = secDash1.get(position); 



     imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader(); 

     imageLoader.get(secDash.getImageUrl(),ImageLoader.getImageListener(holder.imageView, R.drawable.image, android.R.drawable.ic_dialog_alert)); 


     holder.imageView.setImageUrl(secDash.getImageUrl(), imageLoader); 
     holder.bookName.setText(secDash.getBook_name()); 
     holder.price.setText(secDash.getBook_price()); 
     holder.numberD.setText(secDash.getStar_num()); 
     //holder.rate.setText(Float.toString(secDash.getAvg_rate())); 
     holder.download.setText(secDash.getNo_down()); 
     // holder.star.setRating(secDash.getAvg_rate()); 

    } 





    public int getItemCount() { 
     return secDash1.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder{ 
     //Views 
     public NetworkImageView imageView; 
     public TextView bookName; 
     public TextView price; 
     public TextView numberD; 
     public TextView rate; 
     RatingBar star; 
     public TextView download; 


     //Initializing Views 
     public ViewHolder(View itemView) { 
      super(itemView); 
      imageView = (NetworkImageView) itemView.findViewById(R.id.dashImage); 
      bookName = (TextView) itemView.findViewById(R.id.bookName4); 
      price = (TextView) itemView.findViewById(R.id.priceDash); 
      numberD = (TextView) itemView.findViewById(R.id.numberDash); 
      rate = (TextView) itemView.findViewById(R.id.ratenumDash); 
      star = (RatingBar) itemView.findViewById(R.id.rateDash); 
      download = (TextView) itemView.findViewById(R.id.download); 


     } 
    } 
} 
+0

が割り当てられていないために、あなたは価格を受信して​​いませんか? –

+0

書籍名と写真のみが空です。 –

+0

Androidで受け取ったデータとは何ですか?下のjsonがあなたの目的ですか? –

答えて

1

私は問題ではと思います。この行でコードが実行されると、例外が発生し、プログラムはcatchブロックに移り、他のプロパティには決してデータが割り当てられません。 私はその値を得る前にチェックjsonキーが存在することをお勧めします。

+0

オハイオ州のはいどのように愚かな私m.Thanxxはそれが今私はそれを見ることができなかった仕事をしています。あなたは私のday.Againに感謝u ............... ................... –

0

あなたが持っていけない「​​download」を他のキーが発生するため、例外がスローされることのJSONでキーとして

関連する問題