2016-06-14 5 views
0

Я использую firebase и передавая значения в ListViewПолучитьЗначение сеттер не сохраняет значение

передать значение в ListView Я использую следующие

requestList request = requestSnapshot.getValue(requestList.class); 

я также необходимо сохранить ключ для запись, но она не включена в вызов getValue.

я решил написать свой собственный сеттер для ключа и добавить его к классу requestList

я ставлю ключ вручную, как этот

request.setrequestKey(requestSnapshot.getKey()); 

, когда я напечатать значение запроса в журнал непосредственно после добавления их я получить правильные значения

Log.i("Chat", request.getRequestTitle()+": "+request.getRequestDescription()+" "+request.getrequestKey()); 

возвращает эту

RequestTitle: RequestDescription -KK4yufLTSScKHzvZtM4 

я тогда хотел использовать request.getrequestkey в пределах onclicklistener как этот

messagesView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
     requestList o = (requestList) messagesView.getItemAtPosition(position); 

     String requestKey = o.getrequestKey(); 

     Toast.makeText(getActivity(),requestKey,Toast.LENGTH_SHORT).show(); 
    } 
}); 

однако requestKey равна нулю, но requestTitle и requestDescription присутствует и правильно

я не могу понять, почему класс Isnt сохраняя значение

кто может помочь, пожалуйста,

вот мой requestList класс

public class requestList { 

    String RequestTitle; 
    String RequestDescription; 
    String requestKey; 

    //DataSnapshot requestSnapshot; 


    public requestList() { 
    } 

    public requestList(String RequestTitle, String RequestDescription) { 
     this.RequestTitle = RequestTitle; 
     this.RequestDescription = RequestDescription; 
     //this.key = key; 

     //this.requestSnapshot = requestSnapshot; 
    } 

    public String getRequestTitle() { 
     return RequestTitle; 
    } 

    public String getrequestKey() { 
     return requestKey; 
    } 

    public String getRequestDescription() { 
     return RequestDescription; 
    } 


    public void setrequestKey(String requestKey) { 
     this.requestKey = requestKey; 
    } 
} 

я теперь включая полный класс согласно комментарий просит

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     myView = inflater.inflate(R.layout.activity_request, container, false); 

     final ListView messagesView = (ListView) myView.findViewById(listView); 


     test mApp = (test) getActivity().getApplication(); 

     //test mApp = ((getView())getApplicationContext()); 
     String UID = mApp.getUID(); 

     DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users/" + UID + "/Requests"); 

     ref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot snapshot) { 
       for (DataSnapshot requestSnapshot: snapshot.getChildren()) { 
        //requestList request = requestSnapshot.getValue(requestList.class); 
        requestList request = requestSnapshot.getValue(requestList.class); 
        request.setRequestKey(requestSnapshot.getKey()); 
        Log.i("Chat", request.getRequestTitle()+": "+request.getRequestDescription()+" "+request.getRequestKey()); 

        } 
      } 

      @Override 
      public void onCancelled(DatabaseError firebaseError) { 
       Log.e("Chat", "The read failed: " + firebaseError.getMessage()); 
      } 
     }); 



     ListAdapter mAdapter = new FirebaseListAdapter<requestList>(getActivity(), requestList.class, android.R.layout.two_line_list_item, ref) { 
      @Override 
      protected void populateView(View view, requestList requestListItem, int position) { 
       ((TextView)view.findViewById(android.R.id.text1)).setText(requestListItem.getRequestTitle()); 
       ((TextView)view.findViewById(android.R.id.text2)).setText(requestListItem.getRequestDescription()); 

      } 


     }; 


     messagesView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 

       requestList o = (requestList) messagesView.getItemAtPosition(position); 

       String requestKey = o.getRequestKey(); 

       Toast.makeText(getActivity(),requestKey,Toast.LENGTH_SHORT).show(); 
      } 
     }); 


     messagesView.setAdapter(mAdapter); 


     return myView; 



    } 
} 

Я сейчас в том числе базы данных значений

{ 
    "AccountID" : "ABC123", 
    "Created" : "today", 
    "Name" : "value", 
    "Requests" : { 
    "-KK4yufLTSScKHzvZtM4" : { 
     "RequestDescription" : "Request Description 3", 
     "RequestItems" : { 
     "-KK4yv8qnh7YHe7WuJ8B" : { 
      "Description" : "Item Descriptiopn", 
      "Title" : "Item Title" 
     }, 
     "-KK4yv8rPsnJr824rAON" : { 
      "Description" : "Item Descriptiopn", 
      "Title" : "Item Title" 
     }, 
     "-KK4yv8s3ivK7Mfx166H" : { 
      "Description" : "Item Descriptiopn", 
      "Title" : "Item Title" 
     }, 
     "-KK4yv8tKoM2sV1gyOkz" : { 
      "Description" : "Item Descriptiopn", 
      "Title" : "Item Title" 
     } 
     }, 
     "RequestTitle" : "value" 
    } 
    } 
} 
+0

Пожалуйста, покажите нам код для класса 'requestList'. – ishmaelMakitla

+0

@ishmaelMakitla Я обновил выше – PowerMan2015

+0

Получил это. Итак, вы говорите, что если вы выполняете 'o.getrequestKey()' и возвращает 'o.getRequestTitle()' что-нибудь? - Если вы не уверены, вы можете изменить 'o.getrequestKey()' на 'o.getRequestTitle()' и сделать «Toast» значения. – ishmaelMakitla

ответ

0

Поскольку вы используете FirebaseUI, вы не нужно отследить ключ самостоятельно. Вы можете легко получить его с помощью adapter.getRef(...).getKey():

messagesView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
    requestList o = (requestList) messagesView.getItemAtPosition(position); 

    String requestKey = adapter.getRef(position).getKey(); 

    Toast.makeText(getActivity(),requestKey,Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

, когда вы говорите requestKey = адаптер. Какой из адаптеров это нет, переменная определена. Я пробовал и ссылку на firebase (ref), и listAdapter (mAdapter), и оба отказали – PowerMan2015

+0

Используете ли вы [FirebaseUI] (https://github.com/firebase/FirebaseUI-Android)? Если это так, у вас есть реализовал подкласс «FirebaseListAdapter» или «FirebaseRecyclerAdapter». –

+0

Я использую FirebaseUI, и я использую FirebaseListAdapter. Не уверен, что, если я понимаю, что «реализован подкласс», я назвал его в строке списка AdAdapter mAdapter = new FirebaseListAdapter. – PowerMan2015

Смежные вопросы