我正在尝试为个人而言制作一个简单的应用程序,也许是一些同事使用。我很难成功阅读并写入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_Name
或 itemName
,如果将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);
}
});