玩具店申请

application for toys store

我正在尝试构建在线商店应用程序。我有一个列表视图,其中包含:玩具图片、价格、描述和复选框。当用户单击复选框时,我创建了 CustomObject,当单击按钮 "Buy" 时,我必须将 CustomObject 存储在 mysql 数据库中。主要问题是我不知道如何在列表视图中获取 select 对象以及如何发送到 mysql 数据库。

private RequestQueue requestQueue;
    private StringRequest request;
    private Button btnBuy;
    private ListView lvProducts;
    List<CustomObject>customObjects=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        new JSONTask().execute("http://192.168.1.4:80/Mobilno/Products.php");
       DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
        .cacheInMemory(true)
                .cacheOnDisk(true)
        .build();
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
        .defaultDisplayImageOptions(defaultOptions)
        .build();
        ImageLoader.getInstance().init(config);
        lvProducts=(ListView)findViewById(R.id.lvProducts);

        btnBuy=(Button)findViewById(R.id.btnBuy);
        btnBuy.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                request=new StringRequest(Request.Method.POST,"http://192.168.1.4/Mobilno/BuyToy.php",new Response.Listener<String>(){
                    @Override
                    public void onResponse(String response) {
                        try
                        {
                            JSONObject jsonObject=new JSONObject(response);
                            if(jsonObject.names().get(0).equals("success")){
                                Toast.makeText(getApplicationContext(),"success:"+jsonObject.getString("success"),Toast.LENGTH_SHORT).show();

                            }else{  Toast.makeText(getApplicationContext(),"error:"+jsonObject.getString("error"),Toast.LENGTH_SHORT).show();}

                        }

                        catch (JSONException e){e.printStackTrace();}
                    }
                },new Response.ErrorListener(){
                    @Override
                    public void onErrorResponse(VolleyError error) {


                        if (error instanceof NetworkError) {
                            Toast.makeText(getApplicationContext(),"Cannot connect to Internet...Please check your connection!",Toast.LENGTH_SHORT).show();
                        } else if (error instanceof ServerError) {
                            Toast.makeText(getApplicationContext(),"The server could not be found. Please try again after some time!!",Toast.LENGTH_SHORT).show();

                        } else if (error instanceof AuthFailureError) {
                            Toast.makeText(getApplicationContext(),"AuthFailureError",Toast.LENGTH_SHORT).show();
                        } else if (error instanceof ParseError) {
                            Toast.makeText(getApplicationContext(),"Parsing error! Please try again after some time!!",Toast.LENGTH_SHORT).show();

                        } else if (error instanceof NoConnectionError) {
                            Toast.makeText(getApplicationContext(),"NoConnectionError",Toast.LENGTH_SHORT).show();
                        } else if (error instanceof TimeoutError) {
                            Toast.makeText(getApplicationContext(),"Connection TimeOut! Please check your internet connection.",Toast.LENGTH_SHORT).show();

                        }
                    }
                })
                {

                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        String json_string ="{\"buy\":[";
                        for(int i=0;i<customObjects.size();i++)
                        {
                            JSONObject obj_new = new JSONObject();
                            try {
                                obj_new.put("email", customObjects.get(i));
                                obj_new.put("productID", customObjects.get(i));
                                obj_new.put("price", customObjects.get(i));
                                json_string = json_string + obj_new.toString() + ",";
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }


                        }
                        json_string = json_string.substring(0, json_string.length()-1);
                        json_string += "]}";
                        HashMap<String,String> hashMap=new HashMap<String, String>();
                        hashMap.put("",json_string);
                        return  hashMap;
                    }


                };
                requestQueue.add(request);
            }
        });

    }

-

public class JSONTask extends AsyncTask<String,String,List<Prozivod>>
{

   @Override
    protected List<Product> doInBackground(String... params) {
       HttpURLConnection connection=null;
       BufferedReader reader=null;

       try {
           URL url=new URL(params[0]);
           connection=(HttpURLConnection)url.openConnection();
           connection.connect();
           InputStream stream=connection.getInputStream();
           reader=new BufferedReader(new InputStreamReader(stream));
           StringBuffer buffer=new StringBuffer();
           String line="";
           while((line=reader.readLine())!=null)
           {
            buffer.append(line);

           }

           String finalJson=buffer.toString();
           JSONArray jsonArray=new JSONArray(finalJson);
           Log.i(finalJson,"json objekat");
           List<Product> listProducts=new ArrayList<>();
           for(int i=0;i<jsonArray.length();i++)
           {
               JSONObject proizvodJson=jsonArray.getJSONObject(i);
               Product p=new Product();
               p.setProizvodID(proizvodJson.getInt("ProductID"));
               p.setCena(proizvodJson.getInt("Price"));
               p.setOpis(proizvodJson.getString("Description"));
               p.setSlika(proizvodJson.getString("Image"));
               listProducts.add(p);
           }
           return  listProducts;
       } catch (MalformedURLException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }
       catch (JSONException e) {
           e.printStackTrace();
       }finally {
           if(connection!=null){connection.disconnect();}
       }
       try{if(reader!=null){reader.close();}}
       catch (IOException e) {
           e.printStackTrace();
       }
       return null ;
   }

    @Override
    protected void onPostExecute(final List<Product> result) {
        super.onPostExecute(result);
        ProductAdapter adapter=new ProductAdapter (getApplicationContext(),R.layout.red,result);
        lvProducts.setAdapter(adapter);
    }
}

-

    public  class ProductAdapter extends ArrayAdapter{
    private List<Product>listProducts;
    private int resource;
    private LayoutInflater inflater;
    public ProductAdapter (@NonNull Context context, @LayoutRes int resource, @NonNull List<Product> objects) {
        super(context, resource, objects);
        listProducts=objects;
        this.resource=resource;
        inflater=(LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ViewHolder holder=null;
        if(convertView==null)
        {
            holder=new ViewHolder();
         convertView=inflater.inflate(resource,null);
            holder.txtImg=(ImageView)convertView.findViewById(R.id.imgProduct);
            holder.txtDescription=(TextView)convertView.findViewById(R.id.txtDescription);
            holder.checkbox=(CheckBox)convertView.findViewById(R.id.checkbox);
            convertView.setTag(holder);
        }
        else {
              holder=(ViewHolder) convertView.getTag();
            }
   ImageLoader.getInstance().displayImage(listProducts.get(position).getImage(),holder.imgProducts);
        convertView.setTag(holder.checkbox);
        holder.checkbox.setOnClickListener(new View.OnClickListener(){
            public  void onClick(View v)
            {
                CheckBox cb=(CheckBox)v;
             Product pro=(Product)cb.getTag();
                CustomObject customObject=new CustomObject();
                customObject.setProductID(pro.getProductID());
                customObject.setPrice(pro.getCena());
                customObject.setEmail(UlogujSe.email);
                customObjects.add(customObject);
            }
        });

        return convertView;
    }
    class ViewHolder
    {
        private ImageView txtImg;
       private TextView txtDescription;
      private   CheckBox checkbox;
    }
}

这是我的 php 脚本,用于测试我从 json 对象的 android 获取数组并且它在邮递员中工作:

<?php
 $DB_HOST = 'localhost';
 $DB_USER = 'root';
 $DB_PASS = '';
 $DB_NAME = "mobilno";

 $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

 if(mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
   //echo "Connected to MySQL";
$json = file_get_contents('C:\Users\nadaj\Desktop\streamPhp.txt');
$count=0;
$array = json_decode($json, true);
foreach ($array['buy'] as $item){
     $email= $item['email'];
     $productID= $item['productID'];
     $price=$item['price'];
     $sql = "insert into kupio(email,productID,price) values('$email','$productID','$price')";
     if(mysqli_query($mysqli,$sql))
     {
       $count++;

     }

}
if($count>0){echo $json_odgovor['success']='uspesno!';}
if($count==0){echo $json_odgovor['error']='neuspesno!';}
return $count;
}
 echo json_encode($json_odgovor);
mysqli_close($mysqli);
?>

!

我认为您没有意识到这没有正确发送您的数据。

hashMap.put("",json_string);
return  hashMap;

你需要像 hashMap.put("buy",listOfToys);

这样的东西

此外,volley 默认不发送 json。您需要将 Content-type header 设置为 application/json


如果你想发送 {"buy":[]} json object,我建议你使用 JSONObject Volley 请求并使用JSONObject 参数在 URL 之后,用于 POST json 数据。

注意该方法:您的 PHP 必须 return JSON

例如。 Volley Post method for json object