2017-10-02 1 views
0

나는 안드로이드 스튜디오 초보자입니다! 해당 목록 뷰를 클릭하면 google firebase에서 키 (내 앱의 바코드라고도 함)를 검색하려고합니다. 각 키를 검색하고 메서드 오류를 해결할 수 없습니다. 예. 나는 첫 번째 ListView pname : "거시기"를 클릭합니다, 그래서 나는 다른 자바 활동에 키를 전달할 수 있도록 키 (바코드), 97 검색하고 싶습니다 그래서 나머지 데이터를 검색 할 수 있습니다. 다른 활동. Android Firebase cannot resolve method getRef(position) : 나는 같은 많은 다른 코드를 시도안드로이드 파이어베이스가 listview에서 getRef (position) 메서드를 해결할 수 없습니다.

enter image description here

: 여기

잘못된 논리를 얻을 didnt가 희망하는 것은 내 데이터베이스의 그림입니다. 도움이 될 것입니다. 미리 감사드립니다.

private Button AddProduct; 
private DatabaseReference database; 
private ListView mList; 
private ArrayList<String> names = new ArrayList<>(); 
private ArrayList<String> keys = new ArrayList<>(); 
ArrayAdapter<String> arrayAdapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_inventory); 
    AddProduct = (Button) findViewById(R.id.AddProduct); 


    AddProduct.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(Inventory.this, AddProduct.class)); 
     } 
    }); 

    mList = (ListView) findViewById(R.id.listView2); 

    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names); 
    mList.setAdapter(arrayAdapter); 
    database = FirebaseDatabase.getInstance().getReference(); 
    mList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      String value = (String) mList.getItemAtPosition(i); 
      //Toast.makeText(Inventory.this,value,Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(Inventory.this,Edit.class); 
      intent.putExtra("fk",value); 
      startActivity(intent); 
     } 
    }); 

    database.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      arrayAdapter.clear(); 
      for(DataSnapshot snapshot : dataSnapshot.getChildren()){ 

       arrayAdapter.notifyDataSetChanged(); 
       String barcode = (String) snapshot.child("barcode").getValue(); 
       String name = (String) snapshot.child("pname").getValue(); 
       String exp = (String) snapshot.child("expiration").getValue(); 
       String q = (String) snapshot.child("quantity").getValue(); 
       arrayAdapter.add("Product Name: "+name+"\nExpiry Date: "+exp+ "\nQuantity: "+q+"\nBarcode: "+ barcode); 
      } 

     } 

     @Override 
     public void onChildChanged(final DataSnapshot dataSnapshot, String s) { 
      String value = dataSnapshot.getValue(String.class); 
      String key = dataSnapshot.getKey(); 

      int index = keys.indexOf(key); 

      names.set(index, value); 

      arrayAdapter.notifyDataSetChanged(); 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 

업데이트 : 아래에 표시된 코드 중 하나를 사용했지만 두 방법 모두 오류를 해결할 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다. 다음은 내가 밖으로 시도 코드가 있지만 아무 소용이 enter image description here

+0

'getRef (position) '을 사용할 때 오류가 무엇입니까? 오류가 없으면 그 행은 무엇을 인쇄합니까? –

+0

@AlexMamo getRef (위치)가 메서드를 확인할 수 없음을 보여줍니다! 내 업데이트에서 볼 수있는 것처럼 다른 코드를 시도했지만 두 코드 모두 메서드 오류를 해결할 수 없습니다! 고마워요. –

답변

1

이 문제를 해결하려면 다음 코드 줄을 사용할 필요가 오류가 발생했습니다. thisDatabaseReference이 아닌 OnItemClickListener입니다.

database.getRef().getKey() 대신 this.getRef().getKey()을 사용해야합니다.

API documentation을 참조해야 할 수도 있습니다. getRef()은 인수가 필요하지 않습니다.

+0

방법을 해결할 수 없습니다. 어떤 단서? –

+0

업데이트 된 답변을 참조하십시오. –

+0

고마워요 알렉스, 토스트에 코드를 적용했는데 내가 클릭 한 각각의 데이터가 표시됩니다. 하지만 나는 열쇠를 가져야한다. 예를 들면 다음과 같다. 첫 번째 ListView를 pname으로 클릭한다 : "거시기", 나는 다른 자바 액티비티로 키를 전달할 수 있도록 97 번 키만 가져오고 싶다. 그래서 나는 다른 활동에서 나머지 데이터를 검색 할 수있다. –

0

중포 기지 데이터베이스에서 키를 얻으려면, 당신은이 코드를

String key = dataSnapshot.getKey(); 

를 교체하고 다음으로 대체한다고 :

Object key= dataSnapshot.getKey(); 
    String myKey = key.toString() 

android에서 android에서 toString() 메소드를 사용하여 변환해야하는 firebase에서 키를 가져올 객체를 지정해야합니다. 당신이 얻을

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
intent.putExtra("value", value); 
startActivity(intent); 
+0

listview에서 위치를 얻으려면 어떻게해야하나요? –

0

:이 같은 Intent을 사용할 수 있습니다

String value = (String) adapterView.getItemAtPosition(position); 

다른 활동의 값을 사용하려면 :

+0

답장을 보내 주셔서 감사합니다.하지만 불행히도 여전히 오류가 있습니다. 오류 : (63, 40) 오류 : Query 클래스의 getRef 메소드는 주어진 유형에 적용 할 수 없습니다. 필수 : ​​인수 없음 발견 : int 이유 : 실제 및 공식 인수 목록의 길이가 다릅니다 –

+0

업데이트 된 답변보기 – Benjamin

관련 문제