json对象仅保存共享前提中的第一个值

时间:2018-05-23 06:53:26

标签: php android json

我开发了一款用于求职的Android应用程序。在这里,我使用PHP作为JSON响应从服务器获取作业。每份工作都有不同的职位ID 。如果我想申请工作, job id user id 会发送到PHP MySQL数据库。但是这里每个工作申请只传递一个 job id 。所以我不能申请另一份工作,因为job id已在数据库中。 所以如何在共享首选项中保存json对象以及如何检索它。 请帮我。帮助将不胜感激......

模型类

public class getData {
    public String job_title = "";
    public String job_description = "";
    public String address = "";
    public String job_type="";
    public String city="";
    public String job_id="";

    public String getJob_description() {
        return job_description;
    }

    public void setJob_description(String job_description) {
        this.job_description = job_description;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getJob_type() {
        return job_type;
    }

    public void setJob_type(String job_type) {
        this.job_type = job_type;
    }

    public String getJob_title() {
        return job_title;
    }

    public void setJob_title(String job_title) {
        this.job_title = job_title;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getJob_id() {
        return job_id;
    }

    public void setJob_id(String job_id) {
        this.job_id = job_id;
    }
}

控制器类

public class ParserCard extends AsyncTask<Void, Integer, Integer> {
    Context c;
    String data;
    SwipeDeck swipeDeck;
    ProgressDialog pd;
    ArrayList<getData> arrayList = new ArrayList<getData>();
    private SwipeDeckAdapter adapter;

    public  static String job;

    public ParserCard(Context c, String data, SwipeDeck swipeDeck) {
        this.c = c;
        this.data = data;
        this.swipeDeck = swipeDeck;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd = new ProgressDialog(c);
        pd.setTitle("Parser");
        pd.setMessage("Parsing....");
        pd.show();
    }

    @Override
    protected Integer doInBackground(Void... params) {
        return this.parse();
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
        pd.dismiss();
        if(integer == 1){
            adapter = new SwipeDeckAdapter(arrayList, c);
            swipeDeck.setAdapter(adapter);
            //Toast.makeText(c, arrayList.size()+"", Toast.LENGTH_LONG).show();
        }else {
            Toast.makeText(c, "Unable to get data from server", Toast.LENGTH_LONG).show();
        }

    }
    private int parse(){
        try {

              JSONArray jsonArray = new JSONArray(data);

            arrayList.clear();
            for (int i = 0; i<jsonArray.length(); i++){
                getData pd = new getData();
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                pd.setJob_title(jsonObject.getString("job_title"));
                pd.setJob_type(jsonObject.getString("job_type"));
                pd.setJob_description(jsonObject.getString("job_description"));
                pd.setAddress(jsonObject.getString("address"));
                pd.setCity(jsonObject.getString("city"));

                pd.setJob_id(jsonObject.getString("job_id"));
                job=jsonObject.getString("job_id");

                SharedPreferences.Editor editor = c.getSharedPreferences(Config.SHARED_PREF_NAME, MODE_PRIVATE).edit();
                editor.putString("jobId", job);

                editor.commit();

                arrayList.add(pd);

            }
            return 1;
        } catch (JSONException e) {
            Log.e("sopheak", e.toString());
            e.printStackTrace();
        }
        return 0;
    }
}

适配器类

public class SwipeDeckAdapter extends BaseAdapter {

    private ArrayList<getData> data;
    private Context context;
    LayoutInflater mInflater;

    public SwipeDeckAdapter(ArrayList<getData> data, Context context) {
        this.data = data;
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        mInflater = LayoutInflater.from(context);
        View v = convertView;
        if (v == null) {
            v = mInflater.inflate(R.layout.cardview, null);
        }
        getData pd = new getData();
       // ImageView imageView = (ImageView) v.findViewById(R.id.offer_image);
        TextView tv_title = (TextView)v.findViewById(R.id.cardviewjobheading);
        TextView tv_description= (TextView)v.findViewById(R.id.cardviewJobDescription);
        TextView tv_jobtype = (TextView)v.findViewById(R.id.cardviewJobTime);
        TextView tv_companyadress = (TextView)v.findViewById(R.id.cardviewcompanyname);
        TextView tv_companycity = (TextView)v.findViewById(R.id.cardviewcompanyaddress);
        TextView tv_jobid=(TextView)v.findViewById(R.id.cardviewjobid);
        tv_title .setText(data.get(position).getJob_title().toString());
        tv_jobtype.setText(data.get(position).getJob_type().toString());
        tv_description.setText(data.get(position).getJob_description().toString());
        tv_companyadress.setText(data.get(position).getAddress().toString());
        tv_companycity.setText(data.get(position).getCity().toString());
        tv_jobid.setText(data.get(position).getJob_id().toString());


        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        return v;
    }
}

主要活动

public class MainActivity extends AppCompatActivity {
    private SwipeDeck cardStack;

    private ProgressDialog pDialog;
    RequestQueue requestQueue;

    String jobid;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tindercard);
        //FOR ACTION BAR
        ActionBar actionBar = getSupportActionBar();
        //GET BG IMAGE AS BITMAP
        BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.toolbar));
        //SET BG
        actionBar.setBackgroundDrawable(background);
        // getSupportActionBar().hide();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        cardStack = (SwipeDeck)findViewById(R.id.swipe_deck);
        ImageButton btn2 = (ImageButton)findViewById(R.id.rejectBtn);
        ImageButton btn = (ImageButton)findViewById(R.id.acceptBtn);
        cardStack.setHardwareAccelerationEnabled(true);

        String titles  = getIntent().getExtras().getString("title");
        String locations = getIntent().getExtras().getString("location");


        String urlData = "https://alot.ae/api/joblist.php?job_title="+titles+"&city="+locations;

        urlData = urlData.replaceAll(" ", "%20");

        final DownloaderCard dl = new DownloaderCard(MainActivity.this,urlData , cardStack);
        dl.execute();
        cardStack.setEventCallback(new SwipeDeck.SwipeEventCallback() {
            @Override
            public void cardSwipedLeft(int position) {
                // Log.i("MainActivity", "card was swiped left, position in adapter: " + position);
            }

            @Override
            public void cardSwipedRight(int position) {

                saveinformation();



            }

            @Override
            public void cardsDepleted() {

                MaterialToast materialToast=new MaterialToast(MainActivity.this);
                materialToast.show("No Jobs Available", ContextCompat.getDrawable(MainActivity.this,R.drawable.toast_drawable),
                        ContextCompat.getColor(MainActivity.this,R.color.colorAccent),
                        Gravity.CENTER_HORIZONTAL);
            }

            @Override
            public void cardActionDown() {
                // Log.i(TAG, "cardActionDown");
            }

            @Override
            public void cardActionUp() {
                // Log.i, "cardActionUp");
            }

        });
        cardStack.setLeftImage(R.id.left_image);
        cardStack.setRightImage(R.id.right_image);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cardStack.swipeTopCardLeft(180);

            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cardStack.swipeTopCardRight(180);
            }
        });
    }


    private void saveinformation() {







        pDialog = new ProgressDialog(this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();


        StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.URL_APPLYJOB,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String ServerResponse) {

                        // Hiding the progress dialog after all task complete.
                        pDialog.dismiss();
                        try {
                            JSONObject jsonObject = new JSONObject(ServerResponse);


                            if (jsonObject.getInt("success") == 0) {

                                Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();

                            } else if (jsonObject.getInt("success") == 1) {
                               // Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();
                                MaterialToast materialToast=new MaterialToast(MainActivity.this);
                                materialToast.show(jsonObject.getString("message"), ContextCompat.getDrawable(MainActivity.this,R.drawable.toast_drawable),
                                        ContextCompat.getColor(MainActivity.this,R.color.colorAccent),
                                        Gravity.CENTER_HORIZONTAL);
                                } else

                                Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {


                        pDialog.dismiss();


                        MaterialToast materialToast=new MaterialToast(MainActivity.this);
                        materialToast.show("Check Internet Connection", ContextCompat.getDrawable(MainActivity.this,R.drawable.toast_drawable),
                                ContextCompat.getColor(MainActivity.this,R.color.colorAccent),
                                Gravity.CENTER_HORIZONTAL);
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {

                // Creating Map String Params.
                Map<String, String> params = new HashMap<String, String>();

                // Adding All values to Params.
                SharedPreferences prefs = getApplicationContext().getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
                String userid = prefs.getString("userId","");
                String jobid =  prefs.getString("jobId","");



                params.put("user_id",userid);
                params.put("job_id",jobid);

                return params;
            }

        };


        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);


    }

2 个答案:

答案 0 :(得分:0)

您无法保存 JSON对象。但您可以保存 JSON字符串

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("key_from_json", "String_value_from_json");
 editor.putInt("key_from_json","int_value_from_json");
 editor.commit();

答案 1 :(得分:0)

每个键只有一个值,因此您只能使用值保存键job_id。如果要保存多个作业,则应将其另存为列表。例如:

List<String> jobs = new ArrayList<>(); 
        for (int i = 0; i<jsonArray.length(); i++){
            getData pd = new getData();
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            pd.setJob_title(jsonObject.getString("job_title"));
            pd.setJob_type(jsonObject.getString("job_type"));
            pd.setJob_description(jsonObject.getString("job_description"));
            pd.setAddress(jsonObject.getString("address"));
            pd.setCity(jsonObject.getString("city"));

            pd.setJob_id(jsonObject.getString("job_id"));
            jobs.add(jsonObject.getString("job_id"));


            arrayList.add(pd);

        }

 SharedPreferences.Editor editor = c.getSharedPreferences(Config.SHARED_PREF_NAME, MODE_PRIVATE).edit();
            editor.putString("jobId", new Gson().toJson(jobs));
            // you should use Gson lib to convert string to object and object to string
            editor.commit();