我认为我的语法对于从 Firebase 写入/读取不正确,但我不确定从哪里开始



我正在尝试为个人而言制作一个简单的应用程序,也许是一些同事使用。我很难成功阅读并写入firebase数据库。

其中一些代码被撕开了,所以我可能会遇到错误而没有意识到。

我很肯定,这是愚蠢而愚蠢的易于修复的事情,但是我看不到它,并且在搜索方面没有成功。

我想以这种方式将信息放入数据库的方式。

可能的布局?

如果有更好的方法来布置此问题,我全都是耳朵。希望有人可以将我指向正确的方向。所有文件具有正确的顶线或2个,有时会缺少底部支撑。当我尝试复制/粘贴时,我的计算机是超级derpy的,由于某种原因而删除了一些行。

我要完成的工作的摘要。

  • 将显示/存储NSN,名称和项目描述的应用
  • 用户可以自己输入所有这些信息,要输入数据库中,也可以搜索数据库以获取信息。搜索部分将在我更容易零件后接下来。
  • 信息以卡片表格提供,最终可单击以获取更多信息。有关卡的信息将是NSN,名称,描述,最终是图片。
  • 所有信息均来自用户输入或直接进入数据库。

mainActivity.java

import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.firebase.client.Firebase;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.milapps.jd.militemnsnfinder.ShowItemInfo;
import java.io.IOException;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
//Button Variables
private Button btnChoose, btnUpload, btnSubmit, btnReturn;
private final int PICK_IMAGE_REQUEST = 71;
private Uri filePath;
//Firebase storage
FirebaseStorage storage;
StorageReference storageReference;

// Declaring String variable ( In which we are storing firebase server URL 
).
public static final String Firebase_Server_URL = "https://mil-item-nsn-
finder.firebaseio.com/";
// Declaring String variables to store name & phone number get from   .
String nsnHolder, nameHolder, descHolder;
//Declaring firebase database
Firebase firebase;
DatabaseReference databaseReference;
// Root Database Name for Firebase Database.
public static final String Database_Path = "Military NSN Database";
//Declaring EditTexts
EditText NameEditText, NSNEditText, DescEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnSubmit = (Button)findViewById(R.id.btnSubmit_iv);
    btnReturn = (Button)findViewById(R.id.btnReturn_iv);
    btnChoose = (Button)findViewById(R.id.btnChoose_iv);
    btnUpload = (Button)findViewById(R.id.btnUpload_iv);
    NameEditText = (EditText)findViewById(R.id.itemNameIV);
    NSNEditText = (EditText)findViewById(R.id.itemNSN_iv);
    DescEditText = (EditText)findViewById(R.id.itemDesc_iv);

    Firebase.setAndroidContext(MainActivity.this);
    firebase = new Firebase(Firebase_Server_URL);
    databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);


    //Firebase init
    storage = FirebaseStorage.getInstance();
    storageReference = storage.getReference();

    btnChoose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            chooseImage();
        }
    });
    btnUpload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            uploadImage();
        }
    });
    btnSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ItemInfo itemInfo = new ItemInfo();
            GetDataFromEditText();
            // Adding item name into class function object.
            itemInfo.setItemName(nameHolder);
            // Adding item NSN into class function object.
            itemInfo.setItemNSN(nsnHolder);
            //Adding item desc into class function object
            itemInfo.setItemDesc(descHolder);
            // Getting the ID from firebase database.
            String ItemIDFromServer = databaseReference.push().getKey();
            // Adding the both name and number values using student details 
             class object using ID.
            databaseReference.child(ItemIDFromServer).setValue(itemInfo);
            // Showing Toast message after successfully data submit.
            Toast.makeText(MainActivity.this,"Successfully Added", 
            Toast.LENGTH_LONG).show();
        }
    });

    btnReturn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, 
 ShowItemInfo.class);
            startActivity(intent);
        }
    });
}
    private void uploadImage(){
        if(filePath != null){
            final ProgressDialog progressDialog = new ProgressDialog(this);
            progressDialog.setTitle("Uploading...");
            progressDialog.show();
            StorageReference ref = storageReference.child("images/"+ 
UUID.randomUUID().toString());
            ref.putFile(filePath)
                    .addOnSuccessListener(new 
OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot 
taskSnapshot) {
                            progressDialog.dismiss();
                            Toast.makeText(MainActivity.this, "Uploaded", 
Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            progressDialog.dismiss();
                            Toast.makeText(MainActivity.this, "Failed" 
+e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnProgressListener(new 
OnProgressListener<UploadTask.TaskSnapshot>(){
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot 
taskSnapshot){
                            double progress = (100.0 
*taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
                            progressDialog.setMessage("Uploaded " + 
(int)progress+"%");
                        }
                    });
        }
    }
    private void chooseImage(){
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select 
Picture"), PICK_IMAGE_REQUEST);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent 
data){
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data!= null && data.getData() != null)
        {
            filePath = data.getData();
            try{
                Bitmap bitmap = 
MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }
    }
public void GetDataFromEditText(){
    nameHolder = NameEditText.getText().toString().trim();
    descHolder = DescEditText.getText().toString().trim();
    nsnHolder = NSNEditText.getText().toString().trim();
}

ItemInfo.java
    package com.milapps.jd.militemnsnfinder;

public class ItemInfo {
    private String itemName;
    private String itemNSN;
    private String itemDesc;
    public ItemInfo() {
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public String getItemNSN() {
        return itemNSN;
    }
    public void setItemNSN(String itemNSN) {
        this.itemNSN = itemNSN;
    }
    public String getItemDesc() {
        return itemDesc;
    }
    public void setItemDesc(String itemDesc) {
        this.itemDesc = itemDesc;
    }
}
RecyclerViewAdapter.java

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class RecyclerViewAdapter extends 
RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    Context context;
    List<ItemInfo> MainImageUploadInfoList;
    public RecyclerViewAdapter(Context context, List<ItemInfo> TempList) {
        this.MainImageUploadInfoList = TempList;
        this.context = context;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = 

layoutinflater.from(parent.getContext(((。膨胀( r.layout.recyclerview_items,parent,false(;

        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ItemInfo itemInfo = MainImageUploadInfoList.get(position);
        holder.itemName_iv.setText(itemInfo.getItemName());
        holder.itemNSN_iv.setText(itemInfo.getItemNSN());
        holder.itemDesc_iv.setText(itemInfo.getItemDesc());
    }
    @Override
    public int getItemCount() {
        return MainImageUploadInfoList.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder {
        public TextView itemName_iv;
        public TextView itemNSN_iv;
        public TextView itemDesc_iv;
        public ViewHolder(View itemView) {
            super(itemView);
            itemName_iv = (TextView) 
itemView.findViewById(R.id.itemName_iv);
            itemDesc_iv = (TextView) 
itemView.findViewById(R.id.itemDesc_iv);
            itemNSN_iv = (TextView) itemView.findViewById(R.id.itemNSN_iv);
        }
    }
}

showiteminfo.java

package com.milapps.jd.militemnsnfinder;
import android.app.ProgressDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
public class ShowItemInfo extends AppCompatActivity {

    DatabaseReference databaseReference;
    ProgressDialog progressDialog;
    List<ItemInfo> list = new ArrayList<>();
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.show_items_list);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new 
LinearLayoutManager(ShowItemInfo.this));
        progressDialog = new ProgressDialog(ShowItemInfo.this);
        progressDialog.setMessage("Loading Data from Firebase Database");
        progressDialog.show();
        databaseReference = 
FirebaseDatabase.getInstance().getReference(MainActivity.Database_Path);
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                    ItemInfo itemInfo = 
dataSnapshot.getValue(ItemInfo.class);
                    list.add(itemInfo);
                }
                adapter = new RecyclerViewAdapter(ShowItemInfo.this, list);
                recyclerView.setAdapter(adapter);
                progressDialog.dismiss();
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
                progressDialog.dismiss();
            }
        });
    }
}

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.milapps.jd.militemnsnfinder.MainActivity"
    android:layout_margin="10dp">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Enter New Item"
        android:textSize="20dp"
        android:textAlignment="center"
        android:textColor="#000"
        android:id="@+id/textView" />
    <EditText
        android:id="@+id/itemNameIV"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/textView"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:hint="Enter Item Name(Stock)" />
    <EditText
        android:id="@+id/itemNSN_iv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/itemNameIV"
        android:gravity="center"
        android:hint="Enter Item NSN" />
    <EditText
        android:id="@+id/itemDesc_iv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/itemNSN_iv"
        android:gravity="center"
        android:hint="Enter Item Description" />
    <Button
        android:id="@+id/btnChoose_iv"
        android:layout_width="175dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnUpload_iv"
        android:layout_alignBottom="@+id/btnUpload_iv"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:text="Choose" />
    <Button
        android:id="@+id/btnUpload_iv"
        android:layout_width="175dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/itemDesc_iv"
        android:layout_marginTop="53dp"
        android:layout_toEndOf="@+id/btnChoose_iv"
        android:layout_toRightOf="@+id/btnChoose_iv"
        android:text="Upload" />

    <Button
        android:id="@+id/btnSubmit_iv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/btnChoose_iv"
        android:layout_marginTop="32dp"
        android:text="Submit" />
    <Button
        android:id="@+id/btnReturn_iv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/btnSubmit_iv"
        android:layout_marginTop="18dp"
        android:text="Return" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btnChoose_iv"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:gravity="center"
        android:inputType="textPersonName"
        android:text="Upload Picture(Optional)" />
</RelativeLayout>

content_show_student_details.xml

<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.milapps.jd.militemnsnfinder.ShowItemInfo"
    tools:showIn="@layout/show_items_list">
</android.support.constraint.ConstraintLayout>

recyclerview_items.xml
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cardview1"
    android:layout_width="match_parent"
    android:layout_height="75dp"
    android:layout_margin="8dp"
    >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="1dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/itemName_iv"
            android:layout_width="233dp"
            android:layout_height="25dp"
            android:text="something" />
        <TextView
            android:id="@+id/itemNSN_iv"
            android:layout_width="233dp"
            android:layout_height="25dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:text="something" />
        <TextView
            android:id="@+id/itemDesc_iv"
            android:layout_width="232dp"
            android:layout_height="25dp"
            android:layout_alignEnd="@+id/itemName_iv"
            android:layout_alignParentBottom="true"
            android:layout_alignRight="@+id/itemName_iv"
            android:text="something" />
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            card_view:srcCompat="@mipmap/ic_launcher" />

    </RelativeLayout>

</android.support.v7.widget.CardView>

show_items_list.xml

<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.milapps.jd.militemnsnfinder.ShowItemInfo">
    <android.support.v7.widget.RecyclerView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/recyclerView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

    </android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>

首先,在您的pojo中,请确保常数的名称等于firebase数据库中的常数,首先在firebase数据库中,您拥有项目名称,在POJO itemName中,您应该应该放入firebase item_NameitemName,如果将item_Name放置在POJO中的名称中,请在POJO和Firebase中保留相同的名称

第二,您的参考必须像此.child("items").child("item_NSN").....child("items/item_NSN") .....但请不要在firebase中使用空白

中的空格

最后,如果您不能在没有签名的情况下为所有人写和阅读的燃料规则,请更新您

转到您的实时数据库并查找规则,您应该拥有此

// These rules require authentication
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

如果每个人都想读取和写入数据而没有身份验证,则只需将该规则更改为此

 // These rules do not require authentication
// These rules give anyone, even people who are not users of your app,
// read and write access to your database
    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }

,因此我的大脑不再油炸。因此,当尝试通过提交按钮输入信息时,我"想"我修复了我的参考文献,但我不是100%。仍然有些困惑。

btnSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String itemNSN;
            ItemInfo itemInfo = new ItemInfo();
            GetDataFromEditText();
            // Adding item name into class function object.
            itemInfo.setItemName(nameHolder);
            // Adding item NSN into class function object.
            itemInfo.setItemNSN(nsnHolder);
            itemNSN = nsnHolder;
            //Adding item desc into class function object
            itemInfo.setItemDesc(descHolder);
            // Getting the ID from firebase database.
            String ItemIDFromServer = databaseReference.push().getKey();
            // Adding the both name and number values using student details 
class object using ID.
            databaseReference.child("items").setValue(itemNSN);
            databaseReference.child("items/itemNSN").setValue(itemInfo);

            // Showing Toast message after successfully data submit.
            Toast.makeText(MainActivity.this,"Successfully Added",  
Toast.LENGTH_LONG).show();
        }
    });

然后,要通过返回按钮提取所有信息,我不确定应该是什么,但我根本没有更改。我有我想要的cardView布局。但这是我的btnreturn clicklistener。

    btnReturn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, 
ShowItemInfo.class);
            startActivity(intent);
        }
    });

最新更新