2016-04-06 15 views
0

Ben üç sınıf, benim adaptör sınıfı, Oy sınıf ve benim JSONrequest olarak below.The sorunu gösterilen bir acitivty var ben içerde, görünümler listesini alacak olan Etkinliğime benim JSONrequest dediğimiz görebilirsiniz gibidir görünümü Ben bir mVote metin görüşüm var. Bağdaştırıcımda, birisi mVotes'ın 0'dan 1'e değiştirilmesini istediğimi gördüğünde beğenirimButton'u görebilirsiniz. Tüm verilerimi bir sunucudan alıyorum, bu yüzden yeni bir istekte bulunmam gerektiğini varsayıyorum. yeni bir adaptör yapmak için? ve JSON ayrıştırma yöntemi? Bunu nasıl yaparım?!??!Bir görünümü var ve bu görünümde bir metin görüm var Bu metin görünümünü güncellemek istiyorum?

public class AdapterQuestion extends RecyclerView.Adapter<AdapterQuestion.ViewQuestion>{ 
private LayoutInflater mLayoutInflater; 
private ArrayList<QuestionData> data =new ArrayList<>(); 
public AdapterQuestion(Context context){ 
    //get from context 
    mLayoutInflater=LayoutInflater.from(context); 

} 
public void setBloglist(ArrayList<QuestionData> data){ 
    this.data =data; 
    notifyItemRangeChanged(0, this.data.size()); 
} 
@Override 
public ViewQuestion onCreateViewHolder(ViewGroup parent, int viewType){ 
    ViewQuestion holder=new ViewQuestion(view); 
    return holder; 
} 
@Override 
public void onBindViewHolder(ViewQuestion holder, int position) { 
    holder.answerText.setText(currentObj.getMtext()); 
    holder.answerId.setText(currentObj.getId()); 
    holder.mVotes.setText(currentObj.getVotes()); 
    holder.mLikeButton.setTag(currentObj); 
} 

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

public class ViewQuestion extends RecyclerView.ViewHolder{ 
    private TextView answerText; 
    private TextView answerId; 
    private TextView mVotes; 
    private LikeButton mLikeButton; 

    public ViewQuestion (View itemView){ 
     super(itemView); 
     answerText=(TextView)itemView.findViewById(R.id.answerText); 
     answerId=(TextView)itemView.findViewById(R.id.answerId); 
     mVotes=(TextView)itemView.findViewById(R.id.VoteTextView); 
     mLikeButton= (LikeButton)itemView.findViewById(R.id.heart_buttons); 

     mLikeButton.setOnLikeListener(new OnLikeListener() { 
      @Override 
      public void liked(LikeButton likeButton) { 
       Voting vote = new Voting(); 
       vote.onUpVote(answerId()); 
       System.out.print("Adapter Position"+getAdapterPosition()); 
      } 
      @Override 
      public void unLiked(LikeButton likeButton) { 
       Voting onDown=new Voting(); 
       onDown.onDownVote(answerId()); 

      } 
     }); 

    } 
    public String getVoteView(){ 
     String voteView=mVotes.getText().toString(); 
     return voteView; 
    } 
    public String answerId(){ 
     String converted=answerId.getText().toString(); 
     return converted; 
    } 
    public int convertToInt(){ 
     String converted=answerId.getText().toString(); 
     int ConvertedInt=Integer.parseInt(converted); 
     return ConvertedInt; 
    } 
} 
} 

public void JsonRequestMethod(String Id) { 
    mVolleySingleton = VolleySingleton.getInstance(); 
    mRequestQueue = mVolleySingleton.getRequestQueue(); 
    final String URL_ANSWER = "url" + Id + "url"; 
    JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, URL_ANSWER, (String) null, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      mListblogs.clear(); 
      mListblogs = parseJSONResponseQuestion(response); 
      mAdapterQuestion.setBloglist(mListblogs); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      System.out.println(error); 

     } 
    }); 
    mRequestQueue.add(request); 
} 


private ArrayList<QuestionData> parseJSONResponseQuestion(JSONArray response) { 
    if (!response.equals("")) { 
     ArrayList<QuestionData> questionDataArrayList = new ArrayList<>(); 
     try { 
      StringBuilder data = new StringBuilder(); 
      for (int i = 0; i < response.length(); i++) { 
       JSONObject currentQuestions = response.getJSONObject(i); 
       String text = currentQuestions.getString("text"); 
       String questionId = currentQuestions.getString("questionId"); 
       String votes = currentQuestions.getString("votes"); 
       System.out.println(votes+" VOTES"); 
       int voteInt=Integer.parseInt(votes); 

       System.out.println(voteInt); 
       String Answerid = currentQuestions.getString("id"); 
       String selectedId = currentQuestions.getString("selected"); 
       System.out.println(response.length() + "length"); 

       data.append(text + Answerid + "\n"); 

       System.out.println(data); 
       QuestionData questionData = new QuestionData(); 
       questionData.setMtext(text); 
       questionData.setVotes(votes); 
       questionData.setId(Answerid); 
       questionData.setSelected(selectedId); 
       mListblogs.add(questionData); 
      } 
      System.out.println(data.toString()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return mListblogs; 
} 
+2

gibi kodunu değiştirmek. – appukrb

+0

@appukrb Her soru bir hata değil, bu mantıklı bir problem ve tam olarak ne olduğunu söyledim – eli

cevap

0

Oylama

public class Voting { 
private VolleySingleton mVolleySingleton; 
private RequestQueue mRequestQueue; 
private AdapterVoteUpdate mAdapterVotes; 
private ArrayList<QuestionData> updateVotes = new ArrayList<>(); 

public void onUpVote(final String answerId) { 
    final RequestQueue mrequestQueue = VolleySingleton.getInstance().getRequestQueue(); 
    final String PUT_VOTE_UP = "url" + answerId + "url\n"; 
    StringRequest PostVoteUp = new StringRequest(Request.Method.PUT, PUT_VOTE_UP, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
     } 

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

     } 
    }); 
    mrequestQueue.add(PostVoteUp); 
} 
public void onDownVote(final String answerId) { 
    System.out.println("Voted Down"); 
    final RequestQueue mrequestQueue = VolleySingleton.getInstance().getRequestQueue(); 
    final String PUT_VOTE_DOWN = "url" + answerId + "urul"; 
    StringRequest PostVoteUp = new StringRequest(Request.Method.PUT, PUT_VOTE_DOWN, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 

     } 

    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 
      System.out.println("************Answer" + error + "error"); 
     } 
    }); 
    mrequestQueue.add(PostVoteUp); 
} 

JSON RequestClass "Ben yeni bir istek yapmak gerekir varsayıyorum bu yüzden bir sunucudan tüm verileri almak." -> Aslında, sunucunuzdaki verileri yeniden talep etmeniz gerekmez. Sadece kendi AdapterQuestion üzerinde

private ArrayList<QuestionData> data =new ArrayList<>(); 

güncellemeniz gerekir sonra çağrı AdapterQuestion.notifyDataSetChanged(); onUpVote ya da onDownVote

'dan bir başarı yanıtı aldıktan sonra "Yeni bir bağdaştırıcıya ve JSON ayrıştırma yöntemine ihtiyacım var mı? Bunu nasıl yapabilirim?! ??!" -> Gerek

0

sizin recyclerview belirli bir ItemView değiştirmek için kod aşağıda kullanacağız.

notifyItemChanged (index); Eğer onItemclick özellikle TextView'un değiştirmek isterseniz

Eğer madde pozisyon almak zorunda. senin gibi düğme tıklama durumunda

@Override 
public void onBindViewHolder(ViewQuestion holder, int position) { 
    holder.answerText.setText(currentObj.getMtext()); 
    holder.answerId.setText(currentObj.getId()); 
    holder.mVotes.setText(currentObj.getVotes()); 
    holder.mVotes.setTag(currentObj); 
    holder.mLikeButton.setTag(holder); 
} 

, proje çıktısı için isteyen hata oldu ve nasıl düzeltmek için neler dont sormak aşağıda

mLikeButton.setOnLikeListener(new OnLikeListener() { 
       @Override 
       public void liked(LikeButton likeButton) { 
        Voting vote = new Voting(); 
        vote.onUpVote(answerId()); 
final ViewQuestion holder=(ViewQuestionholder)likeButton.getTag(); 
currentObj co=(currentObj)holder.mVotes.getTag(); 
holder.mVotes.setText("16"); 
        System.out.print("Adapter Position"+getAdapterPosition()); 
       } 
       @Override 
       public void unLiked(LikeButton likeButton) { 
        Voting onDown=new Voting(); 
        onDown.onDownVote(answerId()); 
    final ViewQuestion holder=(ViewQuestionholder)likeButton.getTag(); 
currentObj co=(currentObj)holder.mVotes.getTag(); 
holder.mVotes.setText("14"); 
       } 
      }); 
+0

currentObj ne temsil ediyor? ve ViewQuestionholder nedir? – eli

+0

Sadece currentObj'yi şu şekilde çekebilirsiniz – eli

+0

Neden alamıyoruz? currentObj nedir? Bu bir Pojo sınıfı. O zaman yapabiliriz. – MathaN

İlgili konular