2016-03-21 14 views
2

私は、volleyを使用してデータを取得し、recyclerview.iを使用してフィードに表示するアプリケーションに取り組んでいます。各カードに、クリックするとクリック数がカウントされますその特定のカードのテキストビューで(instagramのようなボタン)。今、ボタンをクリックすると、クリックの価値もmysqlデータベースに保存されます。誰もが、これは私のコードデータをmysqlにrecyclerviewからvolleyを使用してボタンを使用して

カードアダプターです?私はこのついて行くことができる方法で私を助けてくださいすることができます

import android.content.Context; 
import android.media.Image; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 
import org.w3c.dom.Text; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Belal on 11/9/2015. 
*/ 
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> { 
    //Imageloader to load image 
    private ImageLoader imageLoader; 
    private Context context; 

    //List to store all superheroes 
    List<SuperHero> superHeroes; 

    //Constructor of this class 
    public CardAdapter(List<SuperHero> superHeroes, Context context) { 
     super(); 
     //Getting all superheroes 
     this.superHeroes = superHeroes; 
     this.context = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.superheroes_list, parent, false); 
     ViewHolder viewHolder = new ViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     //Getting the particular item from the list 
      final SuperHero superHero = superHeroes.get(position); 

     //Loading image from url 
     imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader(); 
     imageLoader.get(superHero.getImageUrl(), ImageLoader.getImageListener(holder.imageView, R.drawable.image, android.R.drawable.ic_dialog_alert)); 

     //Showing data on the views 
     holder.imageView.setImageUrl(superHero.getImageUrl(), imageLoader); 
     holder.textViewName.setText(superHero.getName()); 
     holder.textViewPublisher.setText(superHero.getPublisher()); 
     holder.textViewLikes.setText(superHero.getLikes()); 



     holder.custom_button.setOnClickListener(new View.OnClickListener() { 
      int count; 


      @Override 
      public void onClick(View v) { 

       count = 0; 

       superHeroes.get(position).setCount(superHeroes.get(position).getCount() + 1); 
       holder.txtCount.setText(superHeroes.get(position).getCount() + ""); 


      } 

     }); 



    } 
    @Override 
    public int getItemCount() { 
     return superHeroes.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     //Views 
     public NetworkImageView imageView; 
     public TextView textViewName; 
     public TextView textViewPublisher; 
     public TextView textViewLikes; 
     public TextView txtCount; 
     public ImageButton custom_button; 

     //Initializing Views 
     public ViewHolder(View itemView) { 
      super(itemView); 
      imageView = (NetworkImageView) itemView.findViewById(R.id.imageViewHero); 
      textViewName = (TextView) itemView.findViewById(R.id.textViewName); 
      textViewPublisher = (TextView) itemView.findViewById(R.id.textViewPublisher); 
      textViewLikes = (TextView) itemView.findViewById(R.id.textViewlikes); 
      txtCount = (TextView) itemView.findViewById(R.id.txtCount); 
      custom_button = (ImageButton) itemView.findViewById(R.id.custom_button); 
     } 
    } 
} 

MAINACTIVITY

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 

import android.view.View; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 


import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonArrayRequest; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

public class MainActivity extends AppCompatActivity implements RecyclerView.OnScrollChangeListener { 



    //Creating a List of superheroes 
    private List<SuperHero> listSuperHeroes; 

    //Creating Views 
    private RecyclerView recyclerView; 
    private RecyclerView.LayoutManager layoutManager; 
    private RecyclerView.Adapter adapter; 

    //Volley Request Queue 
    private RequestQueue requestQueue; 
    //The request counter to send ?page=1, ?page=2 requests 
    private int requestCount = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     //Initializing Views 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
     recyclerView.setHasFixedSize(true); 
     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 

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

     //Calling method to get data to fetch data 
     getData(); 

     //Adding an scroll change listener to recyclerview 
     recyclerView.setOnScrollChangeListener(this); 

     //initializing our adapter 
     adapter = new CardAdapter(listSuperHeroes, this); 

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


    } 


    //Request to get json from server we are passing an integer here 
    //This integer will used to specify the page number for the request ?page = requestcount 
    //This method would return a JsonArrayRequest that will be added to the request queue 

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

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

     //JsonArrayRequest of volley 
     JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL + String.valueOf(requestCount), 
       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 an error occurs that means end of the list has reached 
         Toast.makeText(MainActivity.this, "No More Items Available", Toast.LENGTH_SHORT).show(); 
        } 
       }); 

     //Returning the request 
     return jsonArrayRequest; 
    } 



    //This method will get data from the web api 
    private void getData() { 
     //Adding the method to the queue by calling the method getDataFromServer 
     requestQueue.add(getDataFromServer(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++) { 
      //Creating the superhero object 
      SuperHero superHero = new SuperHero(); 
      JSONObject json = null; 
      try { 
       //Getting json 
       json = array.getJSONObject(i); 

       //Adding data to the superhero object 
       superHero.setImageUrl(json.getString(Config.TAG_IMAGE_URL)); 
       superHero.setName(json.getString(Config.TAG_NAME)); 
       superHero.setPublisher(json.getString(Config.TAG_PUBLISHER)); 
       superHero.setLikes(json.getString(Config.TAG_LIKES)); 

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

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




    //This method would check that the recyclerview scroll has reached the bottom or not 
    private boolean isLastItemDisplaying(RecyclerView recyclerView) { 
     if (recyclerView.getAdapter().getItemCount() != 0) { 
      int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition(); 
      if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1) 
       return true; 
     } 
     return false; 
    } 

    //Overriden method to detect scrolling 
    @Override 
    public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 
     //Ifscrolled at last then 
     if (isLastItemDisplaying(recyclerView)) { 

      //Calling the method getdata again 
      getData(); 
     } 
    } 
} 
+0

sqliteデータベースをセットアップしましたか?その本当に簡単なだけgoogleそれ – Shreyans

+0

ちょうどあなたが***カウントの値を渡して、アダプタ内のボタンの 'onClick'内のデータベースにデータを格納するために使用する関数を呼び出します。 –

+0

yh私はすでにデータベースを持っています@Shreyans –

答えて

1

私はあなたが何ができるを理解する助けとなるシナリオを想定しますここでやってください。

RecyclerViewアイテムの数を有していると言うことができますし、各項目は、表CardためMySQL databaseのレコード(レコードが読み出されているところから表現する別の想定名)を表します。

このCard Tablecolumnは、その特定のレコードを気に入ったユーザーの数を追跡するためにIntegerまたはLongとしてlikesと呼ばれている必要があります。ユーザーがボタンをクリックすることでカードを好きなときはいつでも、trueに変数isLikedそのカードインスタンスの値を設定し、MySQL Databaseにカードの表でlikes列数をインクリメントする旨のAPIへのネットワーク呼び出しを行う

これを実現するにはさまざまな方法がありますが、実装が変更されると要件に合わせる必要があります。

class Card{ 
    public long id; 
    public boolean isLiked; 
    public long numberOfLikes; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public boolean isLiked() { 
     return isLiked; 
    } 

    public void setLiked(boolean liked) { 
     isLiked = liked; 
    } 

    public long getNumberOfLikes() { 
     return numberOfLikes; 
    } 

    public void setNumberOfLikes(long numberOfLikes) { 
     this.numberOfLikes = numberOfLikes; 
    } 
} 
+0

私はこれらのすべてをonclickの中で行うべきですか? @Pankaj Nimgade –

+0

はい、あなたはどのように各 'txtCount'(各カードの好きな数を表示する)の値を文字列に割り当てることができますOnClick() –

+0

の好きな数をインクリメントするAPIへのネットワークコールを行うことができます変数? @Pankay Nimgade –

関連する問題