简体   繁体   中英

Saving details using Parse

I am unable to view saved data in the parse.com dashboard.Secondly how to retrieve data and store in recyclerview using parse and adapters.Whats wrong with the code.Thanks in advance Mainactivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.parse.Parse;
import com.parse.ParseObject;
import parse.example.com.parseregistration.R;

public class MainActivity extends AppCompatActivity
{
    EditText firstName,lastName,age,dob;
    Button saveOne,saveTwo,showDetails;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        firstName=(EditText)findViewById(R.id.fn_Input);
        lastName=(EditText)findViewById(R.id.ln_Input);
        age=(EditText)findViewById(R.id.age_input);
        dob=(EditText)findViewById(R.id.dob_Input);
        saveOne=(Button)findViewById(R.id.saveBtn);
        saveTwo=(Button)findViewById(R.id.saveBtn2);
        showDetails=(Button)findViewById(R.id.sdBtn);
        final ParseObject user=new ParseObject("userdata");
        Parse.enableLocalDatastore(this);
        Parse.initialize(this);
        saveOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                user.put("firstname",firstName.getText().toString());
                user.put("lastname",lastName.getText().toString());
                user.put("age",age.getText().toString());
                user.put("dob",dob.getText().toString());
                user.saveInBackground();
                Toast.makeText(getApplicationContext(),"SAVED!",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

Userdata.java

public class UserData1
{
    private String firstname;
    private String lastname;
    private int age;
    private String dob;

    public UserData1()
    {
        //Default Constrcuctor
    }
    public UserData1(String firstname,String lastname,String age,String dob)
    {
        firstname=firstname;
        lastname=lastname;
        age=age;
        dob=dob;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public String toSreing()
    {
        return firstname+"\t"+lastname+"\t"+age+"\t"+dob;
    }
}

MyRecyclerView.java

import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.msit.example.bunty.regform.R;
import com.msit.example.bunty.regform.entities.DataStore;
import com.parse.ParseObject;
import com.parse.ParseQuery;


public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder>
{
    ParseQuery<ParseObject> parseQuery;
    //ArrayList<UserData> userDataStore=new ArrayList<UserData>();
    private MyRecyclerAdapter myRecyclerAdapter=this;
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position)
    {

       /*holder.fNameView.setText(userDataStore.getDataStore().get(position).getFirstName());
        holder.lNameView.setText(userDataStore.getDataStore().get(position).getLastName());
        holder.addressView.setText(userDataStore.getDataStore().get(position).getAddress());
        holder.cityView.setText(userDataStore.getDataStore().get(position).getCity());
        final String city=userDataStore.getDataStore().get(position).city;
        */
        holder.cityView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),city,Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {
        if(userDataStore==null)
        {
            return 0;
        }
        if(!userDataStore.getDataStore().isEmpty()&&userDataStore.getDataStore()!=null)
        {
            return userDataStore.getDataStore().size();
        }
        else
        {
            return 0;
        }
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

         TextView fNameView;
         TextView lNameView;
         TextView addressView;
         Button cityView;
         CardView cardView;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            fNameView = (TextView) itemView.findViewById(R.id.fn_view);
            lNameView = (TextView) itemView.findViewById(R.id.ln_view);
            addressView = (TextView) itemView.findViewById(R.id.addr_view);
            cityView=(Button)itemView.findViewById(R.id.city_view);
            cardView = (CardView) itemLayoutView.findViewById(R.id.card_list);
        }
    }
}`

好吧,对于初学者来说,不要使您的解析对象成为最终对象,这会使它成为不可变的,这也就意味着它也不能被修改或添加...此外,我认为将解析初始化内容放入应用程序类中是最佳做法,否则您每次都需要重新初始化活动开始

Here is your refactored code, I suggest you not to do Parse queries within Adapter . Better do that somewhere inside Activity and after you retain data, pass these values to MyRecyclerAdapter .

import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.msit.example.bunty.regform.R;

import java.util.ArrayList;


public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder>
{
    //ParseQuery<ParseObject> parseQuery;
    private LayoutInflater inflater;
    ArrayList<UserData> userDataStore = new ArrayList<UserData>();
    private MyRecyclerAdapter myRecyclerAdapter=this;

    public MyRecyclerAdapter(Context context, ArrayList<UserData> data) {
        inflater = LayoutInflater.from(context);
        userDataStore = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View view = inflater.inflate(R.layout.listitem_category,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position)
    {

       /*holder.fNameView.setText(userDataStore.getDataStore().get(position).getFirstName());
        holder.lNameView.setText(userDataStore.getDataStore().get(position).getLastName());
        holder.addressView.setText(userDataStore.getDataStore().get(position).getAddress());
        holder.cityView.setText(userDataStore.getDataStore().get(position).getCity());
        final String city=userDataStore.getDataStore().get(position).city;
        */
        holder.cityView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),city,Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {
        if(userDataStore==null)
        {
            return 0;
        }
        if(userDataStore !=null && !userDataStore.isEmpty())
        {
            return userDataStore.size();
        }
        else
        {
            return 0;
        }
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        TextView fNameView;
        TextView lNameView;
        TextView addressView;
        Button cityView;
        CardView cardView;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            fNameView = (TextView) itemView.findViewById(R.id.fn_view);
            lNameView = (TextView) itemView.findViewById(R.id.ln_view);
            addressView = (TextView) itemView.findViewById(R.id.addr_view);
            cityView=(Button)itemView.findViewById(R.id.city_view);
            cardView = (CardView) itemLayoutView.findViewById(R.id.card_list);
        }
    }
}

This is simple example how to retain data from Parse, put these code somewhere inside MainActivity :

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("userdata");
        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> list, ParseException e) {
                if (e == null) {
                    ArrayList<UserData> userDataList = new ArrayList<UserData>();
                    UserData userData;
                    for (ParseObject object : list) {
                        userData = new UserData();
                        userData.setFirstName(object.get("firstname"));
                        userData.setLastName(object.get("lastname"));
                        //...
                        userDataList.add(userData);
                    }
                    MyRecyclerAdapter adapter = new MyRecyclerAdapter(MainActivity.this, userDataList);
                    // instance of RecyclerView declared somewhere in your Activity
                    recyclerView.setAdapter(adapter);
                } else {
                    // Something went wrong, see exception
                }
            }
        });

Btw. here you can find well explained Android dev guide :D

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM