Java 如何从android到PHP获取JSON数组

Java 如何从android到PHP获取JSON数组,java,android,json,Java,Android,Json,我在另一篇文章中看到了下面的代码并使用了它 这段代码获取Android SQLite数据库中的所有行,并将其转换为JSON数组。我想使用PHP获取JSON数组,将其存储到我的在线数据库中 我该怎么办 这是我使用的代码: private JSONArray getResults() { String myPath = this.getDatabasePath("cart.db").toString();// Set path to your database String my

我在另一篇文章中看到了下面的代码并使用了它

这段代码获取Android SQLite数据库中的所有行,并将其转换为JSON数组。我想使用PHP获取JSON数组,将其存储到我的在线数据库中

我该怎么办

这是我使用的代码:

private JSONArray getResults()
{

    String myPath = this.getDatabasePath("cart.db").toString();// Set path to your database

    String myTable = CartContract.CartEntry.TABLE_NAME;//Set name of your table

    SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    String searchQuery = "SELECT  * FROM " + myTable;
    Cursor cursor = myDataBase.rawQuery(searchQuery, null );

    JSONArray resultSet     = new JSONArray();

    cursor.moveToFirst();
    while (cursor.isAfterLast() == false) {

        int totalColumn = cursor.getColumnCount();
        JSONObject rowObject = new JSONObject();

        for( int i=0 ;  i< totalColumn ; i++ )
        {
            if( cursor.getColumnName(i) != null )
            {
                try
                {
                    if( cursor.getString(i) != null )
                    {
                        Log.d("TAG_NAME", cursor.getString(i) );
                        rowObject.put(cursor.getColumnName(i) ,  cursor.getString(i) );
                    }
                    else
                    {
                        rowObject.put( cursor.getColumnName(i) ,  "" );
                    }
                }
                catch( Exception e )
                {
                    Log.d("TAG_NAME", e.getMessage()  );
                }
            }
        }
        resultSet.put(rowObject);
        cursor.moveToNext();
    }
    cursor.close();
    Log.d("FINAL RESULT", resultSet.toString() );
    return resultSet;
}

更新:我使用了@Christopher Robin Fey Feysenbe的一些代码,它成功了!非常感谢您

您可能需要使用此功能

package com.your.app.name;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import com.android.volley.NetworkError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.Iterator;
import java.util.Map;


/**
 * Helper Class to handle Network Requests
 * with Volley
 */
public class Network {
    private static Network network;
    private RequestQueue mRequestQueue;
    private static Context mCtx;
    public final String TAG = "Network Helper";

    /**
     * Constructor
     */
    private Network(Context c) {
        mCtx = c;
        mRequestQueue = getRequestQueue();
    }


    public interface INetworkCallback {
        void NetworkSuccess(String response);

        void NetworkError(String error);

    }

    public static synchronized Network getInstance(Context c) {
        if (network == null) {
            network = new Network(c);
        }
        return network;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }

    /**
     * Perform a POST Request to a specified url;
     *
     * @param host
     * @param url
     * @param params
     * @param callback new INetworkCallback()
     */
    public void postRequest(final String host, final String url, final Map params, final INetworkCallback callback) {

        try {

            StringRequest postRequest = new StringRequest(Request.Method.POST, (host + url),
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.v(TAG, response);
                            //make successCallback
                            callback.NetworkSuccess(response);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (error instanceof NetworkError) {
                        //no response from compound URL
                        callback.NetworkError(error.toString());
                        Toast.makeText(mCtx, "No internet connection", Toast.LENGTH_LONG).show();
                    } else if (error.networkResponse != null && error.networkResponse.statusCode == 500 ||
                            error.networkResponse != null && error.networkResponse.statusCode == 301) {
                        //Show errorMessage and log Error
                        callback.NetworkError(error.networkResponse.headers.get("message"));
                        String mess = error.networkResponse.headers.get("message");
                        if (mess != null && !mess.isEmpty()) {
                            Toast.makeText(mCtx, error.networkResponse.headers.get("message"), Toast.LENGTH_LONG).show();
                        }
                    } else {
                        //some unexpected Error occurred
                        callback.NetworkError("Network Error: " + error.toString());
                    }
                }
            }) {
                @Override
                protected Map<String, String> getParams() {
                    return params;
                }
            };


            //add request to queue
            addToRequestQueue(postRequest);

        } catch (Exception e) {
            callback.NetworkError("Error performing Request: - " + e.toString());
        }
    }

    public void getRequest(final String host, final String url, final Map params, final INetworkCallback callback) {
        String paramsString = makeGetURL(params);
        Log.v(TAG, "======= " + paramsString + " =======");
        try {

            StringRequest getRequest = new StringRequest(Request.Method.GET, (host + url + paramsString),
                    new Response.Listener<String>() {

                        @Override
                        public void onResponse(String response) {
                            Log.v(TAG, response);

                            //make successCallback
                            callback.NetworkSuccess(response);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (error instanceof NetworkError) {
                        //no response from compound URL
                        callback.NetworkError(error.toString());
                        Toast.makeText(mCtx, "No internet connection", Toast.LENGTH_LONG).show();
                    } else if (error instanceof TimeoutError) {
                        //no response from compound URL
                        callback.NetworkError(error.toString());
                        Toast.makeText(mCtx, "No server connection", Toast.LENGTH_LONG).show();
                    } else if (error.networkResponse != null && error.networkResponse.statusCode == 500) {
                        //Show errorMessage and log Error
                        callback.NetworkError(error.networkResponse.headers.get("message"));
                        String mess = error.networkResponse.headers.get("message");
                        if (mess != null && !mess.isEmpty()) {
                            Toast.makeText(mCtx, error.networkResponse.headers.get("message"), Toast.LENGTH_LONG).show();
                        }
                    } else {
                        //some unexpected Error occurred
                        callback.NetworkError("NetworkError: " + error.toString());
                    }
                }
            });

            //add request to queue
            addToRequestQueue(getRequest);
        } catch (Exception e) {
            callback.NetworkError("Error performing request: " + e.toString());
        }
    }

    /**
     * Iterates over all Set entries of HashMap and
     * generates a GET URL Link base on the key, value pairs
     *
     * @param params
     * @return
     */
    private String makeGetURL(Map params) {
        String qm;
        String url = "";

        if (params != null) {
            qm = (params.size() > 0) ? "?" : "";

            //add ? if there ara parameters
            url += qm;

            Iterator it = params.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry param = (Map.Entry) it.next();
                url += param.getKey() + "=" + param.getValue() + "&";
            }

            //erase last char
            try {
                url = url.substring(0, url.length() - 1);
            } catch (Exception e) {
                //IF FAILS it means no parameters have been putted
                Log.i(TAG, "no parameters found for get request");
            }
        }

        return url;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }
}
package com.your.app.name;
导入android.content.Context;
导入android.util.Log;
导入android.widget.Toast;
导入com.android.volley.NetworkError;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.TimeoutError;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONArray;
导入org.json.JSONException;
导入java.util.Iterator;
导入java.util.Map;
/**
*帮助器类来处理网络请求
*凌空抽射
*/
公共班级网络{
专用静态网络;
私有请求队列mRequestQueue;
私有静态上下文mCtx;
public final String TAG=“Network Helper”;
/**
*建造师
*/
专用网络(上下文c){
mCtx=c;
mRequestQueue=getRequestQueue();
}
公共接口INetworkCallback{
void NetworkSuccess(字符串响应);
无效网络错误(字符串错误);
}
公共静态同步网络getInstance(上下文c){
if(网络==null){
网络=新网络(c);
}
返回网络;
}
公共请求队列getRequestQueue(){
if(mRequestQueue==null){
mRequestQueue=Volley.newRequestQueue(mCtx.getApplicationContext());
}
返回mrequest队列;
}
/**
*对指定的url执行POST请求;
*
*@param主机
*@param-url
*@param params
*@param callback new INetworkCallback()
*/
公共void postRequest(最终字符串主机、最终字符串url、最终映射参数、最终INetworkCallback){
试一试{
StringRequest postRequest=新的StringRequest(Request.Method.POST,(主机+url),
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.v(标签、响应);
//使成功回调
callback.NetworkSuccess(响应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
if(网络错误实例错误){
//没有来自复合URL的响应
callback.NetworkError(error.toString());
Toast.makeText(mCtx,“无互联网连接”,Toast.LENGTH_LONG.show();
}else if(error.networkResponse!=null&&error.networkResponse.statusCode==500||
error.networkResponse!=null&&error.networkResponse.statusCode==301){
//显示错误消息和日志错误
NetworkError(error.networkResponse.headers.get(“message”);
字符串mess=error.networkResponse.headers.get(“消息”);
if(mess!=null&&!mess.isEmpty()){
Toast.makeText(mCtx,error.networkResponse.headers.get(“message”),Toast.LENGTH\u LONG.show();
}
}否则{
//发生了一些意外错误
callback.NetworkError(“网络错误:+Error.toString());
}
}
}) {
@凌驾
受保护的映射getParams(){
返回参数;
}
};
//将请求添加到队列
addToRequestQueue(postRequest);
}捕获(例外e){
NetworkError(“执行请求时出错:-“+e.toString());
}
}
public void getRequest(最终字符串主机、最终字符串url、最终映射参数、最终INetworkCallback){
字符串paramsString=makeGetURL(params);
Log.v(标记“==”+paramsString+”==”;
试一试{
StringRequest getRequest=新的StringRequest(Request.Method.GET,(host+url+paramsString),
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.v(标签、响应);
//使成功回调
callback.NetworkSuccess(响应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
if(网络错误实例错误){
//没有来自复合URL的响应
callback.NetworkError(error.toString());
Toast.makeText(mCtx,“无互联网连接”,Toast.LENGTH_LONG.show();
}else if(TimeoutError的错误实例){
//没有来自复合URL的响应
callback.NetworkError(error.toString());
Toast.makeText(mCtx,“无服务器连接”,Toast.LENGTH_LONG.show();
}else if(error.networkResponse!=null&&error.networkResponse.statusCode==500){
//显示错误消息和日志错误
NetworkError(error.networkResponse.headers.get(“message”);
字符串mess=error.networkRespo
package com.your.app.name;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import com.android.volley.NetworkError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.Iterator;
import java.util.Map;


/**
 * Helper Class to handle Network Requests
 * with Volley
 */
public class Network {
    private static Network network;
    private RequestQueue mRequestQueue;
    private static Context mCtx;
    public final String TAG = "Network Helper";

    /**
     * Constructor
     */
    private Network(Context c) {
        mCtx = c;
        mRequestQueue = getRequestQueue();
    }


    public interface INetworkCallback {
        void NetworkSuccess(String response);

        void NetworkError(String error);

    }

    public static synchronized Network getInstance(Context c) {
        if (network == null) {
            network = new Network(c);
        }
        return network;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }

    /**
     * Perform a POST Request to a specified url;
     *
     * @param host
     * @param url
     * @param params
     * @param callback new INetworkCallback()
     */
    public void postRequest(final String host, final String url, final Map params, final INetworkCallback callback) {

        try {

            StringRequest postRequest = new StringRequest(Request.Method.POST, (host + url),
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.v(TAG, response);
                            //make successCallback
                            callback.NetworkSuccess(response);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (error instanceof NetworkError) {
                        //no response from compound URL
                        callback.NetworkError(error.toString());
                        Toast.makeText(mCtx, "No internet connection", Toast.LENGTH_LONG).show();
                    } else if (error.networkResponse != null && error.networkResponse.statusCode == 500 ||
                            error.networkResponse != null && error.networkResponse.statusCode == 301) {
                        //Show errorMessage and log Error
                        callback.NetworkError(error.networkResponse.headers.get("message"));
                        String mess = error.networkResponse.headers.get("message");
                        if (mess != null && !mess.isEmpty()) {
                            Toast.makeText(mCtx, error.networkResponse.headers.get("message"), Toast.LENGTH_LONG).show();
                        }
                    } else {
                        //some unexpected Error occurred
                        callback.NetworkError("Network Error: " + error.toString());
                    }
                }
            }) {
                @Override
                protected Map<String, String> getParams() {
                    return params;
                }
            };


            //add request to queue
            addToRequestQueue(postRequest);

        } catch (Exception e) {
            callback.NetworkError("Error performing Request: - " + e.toString());
        }
    }

    public void getRequest(final String host, final String url, final Map params, final INetworkCallback callback) {
        String paramsString = makeGetURL(params);
        Log.v(TAG, "======= " + paramsString + " =======");
        try {

            StringRequest getRequest = new StringRequest(Request.Method.GET, (host + url + paramsString),
                    new Response.Listener<String>() {

                        @Override
                        public void onResponse(String response) {
                            Log.v(TAG, response);

                            //make successCallback
                            callback.NetworkSuccess(response);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (error instanceof NetworkError) {
                        //no response from compound URL
                        callback.NetworkError(error.toString());
                        Toast.makeText(mCtx, "No internet connection", Toast.LENGTH_LONG).show();
                    } else if (error instanceof TimeoutError) {
                        //no response from compound URL
                        callback.NetworkError(error.toString());
                        Toast.makeText(mCtx, "No server connection", Toast.LENGTH_LONG).show();
                    } else if (error.networkResponse != null && error.networkResponse.statusCode == 500) {
                        //Show errorMessage and log Error
                        callback.NetworkError(error.networkResponse.headers.get("message"));
                        String mess = error.networkResponse.headers.get("message");
                        if (mess != null && !mess.isEmpty()) {
                            Toast.makeText(mCtx, error.networkResponse.headers.get("message"), Toast.LENGTH_LONG).show();
                        }
                    } else {
                        //some unexpected Error occurred
                        callback.NetworkError("NetworkError: " + error.toString());
                    }
                }
            });

            //add request to queue
            addToRequestQueue(getRequest);
        } catch (Exception e) {
            callback.NetworkError("Error performing request: " + e.toString());
        }
    }

    /**
     * Iterates over all Set entries of HashMap and
     * generates a GET URL Link base on the key, value pairs
     *
     * @param params
     * @return
     */
    private String makeGetURL(Map params) {
        String qm;
        String url = "";

        if (params != null) {
            qm = (params.size() > 0) ? "?" : "";

            //add ? if there ara parameters
            url += qm;

            Iterator it = params.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry param = (Map.Entry) it.next();
                url += param.getKey() + "=" + param.getValue() + "&";
            }

            //erase last char
            try {
                url = url.substring(0, url.length() - 1);
            } catch (Exception e) {
                //IF FAILS it means no parameters have been putted
                Log.i(TAG, "no parameters found for get request");
            }
        }

        return url;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }
}
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.HashMap;


public class Test extends AppCompatActivity {

    private JSONArray getResults()
    {

        String myPath = this.getDatabasePath("cart.db").toString();// Set path to your database

        String myTable = CartContract.CartEntry.TABLE_NAME;//Set name of your table

        SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        String searchQuery = "SELECT  * FROM " + myTable;
        Cursor cursor = myDataBase.rawQuery(searchQuery, null );

        JSONArray resultSet     = new JSONArray();

        cursor.moveToFirst();
        while (cursor.isAfterLast() == false) {

            int totalColumn = cursor.getColumnCount();
            JSONObject rowObject = new JSONObject();

            for( int i=0 ;  i< totalColumn ; i++ )
            {
                if( cursor.getColumnName(i) != null )
                {
                    try
                    {
                        if( cursor.getString(i) != null )
                        {
                            Log.d("TAG_NAME", cursor.getString(i) );
                            rowObject.put(cursor.getColumnName(i) ,  cursor.getString(i) );
                        }
                        else
                        {
                            rowObject.put( cursor.getColumnName(i) ,  "" );
                        }
                    }
                    catch( Exception e )
                    {
                        Log.d("TAG_NAME", e.getMessage()  );
                    }
                }
            }
            resultSet.put(rowObject);
            cursor.moveToNext();
        }
        cursor.close();
        Log.d("FINAL RESULT", resultSet.toString() );
        return resultSet;
    }

    private void sendResult(String resultJSONString) {
        //perform post request
        HashMap<String, String> params = new HashMap<>();
        params.put("data", resultJSONString);

        Network.getInstance(this).postRequest("www.some-adress.com/", "do_stuff.php", params, new Network.INetworkCallback() {
            @Override
            public void NetworkSuccess(String response) {
                //
                Log.i("RECEIVED RESPONSE", response);
            }

            @Override
            public void NetworkError(String error) {
                //
                Log.e("ERROR SENDING DATA", error);
            }
        });


    }


    public void sendData(String value) {
        this.sendResult(getResults().toString());
    }

}
<?php
//include my example script db.php
include_once(dirname(__DIR__) . "/Server/DB/DB.php");


$json = '[{"id":"1","food_id":"52","food_price":"30","food_name":"Pink Lemonade","quantity":"5","amount":"150","special_request":""},{"id":"2","food_id":"51","food_price":"30","food_name":"House Blend Iced Tea","quantity":"3","amount":"90","special_request":""}]';
//decode JSON data
$data = json_decode($json, TRUE);

var_dump($data);

$multiQuery = "";

foreach ($data as $item) {

    $foodId =  $item['food_id'];
    $foodPrice =  $item['food_price'];
    $foodName =  $item['food_name'];
    $quantity =  $item['quantity'];
    $amount =  $item['amount'];
    $specialRequest =  $item['special_request'];

    $insertQuery = "INSERT INTO your_table_name (food_id, food_price, food_name, quantity, amount, special_request) VALUES ($foodId, $foodPrice, $foodName, $quantity, $amount, $specialRequest);";

    $multiQuery .= $insertQuery;
}

$db = new DB();

if($db->multiQuery($multiQuery)) {
    //data was saved
} else {
    $db->getErrorMessage();
}

?>
<?php



/**
 * Class DB
 *
 * Handles database access and Errors
 */
class DB
{

    private $host = "localhost";
    private $user = "root";
    private $pw = "";
    private $dbName = "yourDbNameHere";
    private $con;

    /**
     * Class constructor Method
     */
    public function __construct()
    {
        $this->connect($this->host, $this->user, $this->pw, $this->dbName);
        header('Content-Type: text/html; charset=utf-8');
    }

    /**
     * Makes Database connection an
     *
     * @param $host
     * @param $user
     * @param $pw
     * @param $dbName
     */
    public function connect($host, $user, $pw, $dbName)
    {
        $this->con = mysqli_connect($host, $user, $pw, $dbName);
        if($this->con != null) {
            $this->con->set_charset('utf8');
        } else {
            $this->dbError("Keine Verbindung zur Datenbank");
        }
    }

    public function escapeQuery($query)
    {
        $result = null;
        if (!empty($query)) {
            return mysqli_real_escape_string($this->con, $query);
        } else {
            return false;
        }
    }

    /**
     * Performs a query against the database and returns the mysqli_result
     *
     * @param $query
     * @return bool|mysqli_result
     */
    public function query($query)
    {
        $result = null;
        if (!empty($query)) {
            return mysqli_query($this->con, $query);
        } else {
            $this->dbError("empty query String");
            return false;
        }
    }


    /**
     *
     *
     * @param $query
     * @return array|bool
     */
    public function multiQuery($query)
    {
        $result = null;
        if (!empty($query)) {
            $data = array();

            if (mysqli_multi_query($this->con, $query)) {
                do {
                    // Store first result set
                    if ($result = mysqli_store_result($this->con)) {
                        // Fetch one and one row
                        while ($row = mysqli_fetch_assoc($result)) {
                            $data[] = $row;
                        }
                        // Free result set
                        mysqli_free_result($result);
                    }
                } while (mysqli_next_result($this->con));
            }

            if(mysqli_error($this->con)) {
                $error = mysqli_error_list($this->con);
                return false;
            } else {
                if(count($data) > 0) {
                    return $data;
                } else {
                    return true;
                }
            }
        } else {
            $this->dbError("empty query String");
            return false;
        }
    }

    /**
     * Performs q query against the database and returns JSON object
     *
     * @param $query
     * @return bool
     */
    public function queryArray($query)
    {
        $result = null;
        if (!empty($query)) {
            $result = mysqli_query($this->con, $query);

            $data = array();
            if (!empty($result)) {
                while ($row = $result->fetch_assoc()) {
                    $data[] = $row;
                }
                return ($data);
            } else {
                $this->dbError(mysqli_error($this->con));
                return false;
            }
        } else {
            $this->dbError("empty query String");
            return false;
        }

    }


    /**
     * Throws error and custom error message if passed as parameter
     *
     * @param $message
     */
    public function dbError($message)
    {
        Response::sendError($message);
    }


    /**
     * Returns the mysqli_error message if error occurred
     *
     * @return string
     */
    public function getErrorMessage()
    {
       return mysqli_error($this->con);
    }


    /**
     * Checks if error message contains Duplicate Entry Error
     *
     * @return bool
     */
    public function IsDuplicateEntry()
    {
        if (strpos($this->getErrorMessage(), "Duplicate") !== false) {
            return true;
        } else {
            false;
        }
    }

}