php:读取json arraylist并在mysql中保存数据?

时间:2017-09-15 04:59:53

标签: java php android json retrofit2

我想将arraylist从android发送到php以便存储在database中,但我无法为其找到确切的代码。任何人都可以指导我解决这个问题的方向吗?

以下是我创建arraylist

的java代码
private void loadCart()
{

    productList.clear();
    Cursor cursor = dbHelper.getCarProducts();
    cursor.moveToFirst();
    do {
        CartProduct cartProduct = new CartProduct();
        cartProduct.setProductName("Name: "+cursor.getString(cursor.getColumnIndex("_Name")));
        cartProduct.setProductCost("Cost: "+cursor.getString(cursor.getColumnIndex("_Cost")));
        cartProduct.setProductPrice("Price: "+cursor.getString(cursor.getColumnIndex("_Price")));
        cartProduct.setProductQuantity("Quantity: "+cursor.getString(cursor.getColumnIndex("_Quantity")));
        productList.add(cartProduct);

    }while(cursor.moveToNext());


}

我使用retrofit2将arraylist发送到服务器,但正如我在其他问题中看到的那样,我无法获取file_get_contents的url?

4 个答案:

答案 0 :(得分:1)

你去......

第1步:在gradle.app

中添加改造依赖项
compile 'com.squareup.retrofit:retrofit:1.9.0'

步骤2:创建一个如下所示的RestClient类。

public class RestClient {
    private static final String BASE_URL = DataConstants.TEST_URL; //Place your web service URL here
    private ApiInterface apiService;

    public RestClient()
    {
        RequestInterceptor requestInterceptor = new RequestInterceptor() {
            @Override
            public void intercept(RequestFacade request) {

                request.addHeader("Accept", "application/json");
            }
        };

        RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setRequestInterceptor(requestInterceptor)
                .setEndpoint(BASE_URL)
                .build();

        apiService = restAdapter.create(ApiInterface.class);
    }

    public ApiInterface getApiService()
    {
        return apiService;
    }
}

步骤3:为POST URL建立接口。

public interface ApiInterface {
    @POST("/sendData")
    void sendData(@Body JsonObject jsonObject,
                          Callback<DataModel> dataModelCallback);
}

步骤4:制作如下的POJO课程。

public class DataModel{
    private String success;

public String getSuccess() {
        return success;
    }

public void setSuccess(String success) {
        this.success = success;
    }

}

第5步:从您的活动中调用webservice,如下所示。

private void callWebService(String user_id) {
        try {//TODO SEND
            final Utility utility = new Utility(this);
            utility.showProgressDialog();
            JsonObject myJsonData = new JsonObject();
            myJsonData.addProperty("user_id", user_id);
            Gson gsonData = new GsonBuilder().create();
            JsonArray dataArray = new JsonArray();
            dataArray = gsonData.toJsonTree(productList).getAsJsonArray();  //Here you want to add your array list i.e productList
            myJsonData.add("assign_to", jaAssignee);

            new RestClient().getApiService().sendData(myJsonData, new Callback<DataModel>() {
                @Override
                public void success(DataModel dataModel, Response response) {
                    utility.hideProgressDialog();
                    try {
                        String success = dataModel.getSuccess();
                        if (success.equalsIgnoreCase("Success")) {
                            //Do what you want to do
                        }
                    } catch (Exception e) {
                    }
                }

                @Override
                public void failure(RetrofitError error) {
                    utility.hideProgressDialog();
                }
            });
        } catch (Exception e) {
        }
    }

希望这会对你有帮助!

答案 1 :(得分:0)

一次性发送所有数据。创建JsonArray并通过创建JsonObject添加每个对象。完成后,一次性上传所有数据。你只需要在php中解码该数组。

使用它的优点是,您可以很好地管理改造中的响应(是异步的)

答案 2 :(得分:0)

您可以通过

解析json中的php
<?php 
   header('Content-type: application/json');
   $jsonString = file_get_contents('php://input');   
   $jsonArray = json_decode($jsonString,true);

   print_r($jsonArray);/* print array */

&GT;

答案 3 :(得分:0)

在几乎寻找3周以上和n +小时的挫折之后,我终于找到了解决问题的方法并与人分享,这样他们就可以从中受益(因为我被另一个A / c阻止了问太多问题和投票),为了将您的数组列表发送到您的服务器,我们需要使用另一个库,根据我的需要最合适的是循环j的async-http库,这些是导入和使用的步骤程序中的库: -

1.)通过在bulid.gradle(app模块)中编写此语句将库导入到项目中: -

编译'com.loopj.android:android-async-http:1.4.9'

2.)创建以下变量以便在程序中使用它们: -

 AsyncHttpClient (a client to send data to your server)
    RequestPrarms (Data sent to your server for parsing and further operations )
    String url(Link to your server where actually operations occurs)

3。)现在我们使用这些变量并运行程序: -

P

arams.put("OrderSummary", <your array list>);
           httpClient.post(APIURL.API_URL,params, new AsyncHttpResponseHandler() {
               @Override
               public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                   //your operations on success
               }

               @Override
               public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                    Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show();
               }
           });  

我希望这有点清除你的怀疑我仍然在创建我的php端以便在数据库中插入数据