提问人:Andrea 提问时间:3/29/2018 最后编辑:B. DesaiAndrea 更新时间:4/3/2018 访问量:531
将 json 从 android 发送到 php 错误:未定义的索引:ID
Send json to php from android error: Undefined index: ID
问:
我尝试将数据从我的应用程序 Android 发送到来自 php 文件的数据库 mysql。
但它总是返回我这个错误:
[2018 年 3 月 24 日星期六 12:56:42.061845][php7:注意][PID 1035][客户端 192.168.1.151 :56068] PHP 注意:未定义的索引:ID_ /var/www/html/Find_First.php 上线 18
以下是android代码: 我用来发送的扬声器
HttpURLConnection con = utilityBOperation.Connect(urlAddress);
// Log.v(TAG,"Sender/ send: valore del risultato della connessione al server"+ con);
if (con==null){
Log.v(TAG,"Sender: Send : Il risultato del HttpURLConnection è nullo : " + con);
return null;
}
try {
Log.v(TAG,"Sender: Send : Il risultato del HttpURLConnection non è nullo : " );
OutputStream os = con.getOutputStream();
// Write
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
bw.write(new DataPackager(Id_String,GRM_Family,GRM_Prodoct,MK_Nation,MK_Company).packData());
Log.v(TAG,"Sender: Send : Il packData è stato inviato ");
bw.flush();
// RELEASE RES
// Verifico i valori dolpo l' invio dei dati
Log.v(TAG,"Sender: Send : Il risultato del HttpURLConnection " +
"Dopo l'invio dello streaming dati : " + con);
Log.v(TAG,"Sender: Send : Il risultato del outputstreaming : " + os);
bw.close();
os.close();
//HAS IT BEEN SUCCESSFUL?
int responseCode=con.getResponseCode();
Log.v(TAG,"Sender: Send : Il valore della risposta dell 'invio al server è: " + responseCode);
Log.v(TAG,"Sender: Send : Il valore della risposta dell 'invio al server è: " + con.getResponseMessage());
Log.v(TAG,"Sender: Send : Il valore della risposta dell 'invio al server getErrorStream(): " + con.getErrorStream());
if (responseCode== HTTP_OK){
//GET EXACT RESPONSE
Log.v(TAG,"Sender: Send : Il responsecode è Http_Ok " + HTTP_OK );
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer response = new StringBuffer();
Log.v(TAG,"Sender: Send : Recupero il valore dello StringBUffer : " + response);
String line;
//READ LINE BY LINE
while ((line=br.readLine())!= null){
response.append(line);
}
// RELEASE RES
br.close();
String JsonData = response.toString();
JSONObject JsonOB = new JSONObject(JsonData);
JSONArray parentArray = JsonOB.getJSONArray("response");
JSONObject finalOB = parentArray.getJSONObject(0);
Log.v(TAG,"Sender: Send : Il valore del Json che ricevo : " + finalOB);
Find_Place.Rest_Data_to_Json(finalOB);
return response.toString();
}else {
Log.v(TAG,"Sender: Send : La risposta dell 'invio al server è negativa : " + responseCode);
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
-- 我创建连接的类
public static HttpURLConnection Connect(String urlAddress) {
// TODO: Sono nel connect
HttpURLConnection con;
try {
Log.v(TAG, "utilityBOopreation:Connect: entrato nel connect");
URL url = new URL(urlAddress);
con = (HttpURLConnection) url.openConnection();
// set propertis
con.setRequestMethod("POST");
con.setConnectTimeout(1000);
con.setReadTimeout(2000);
// con.setRequestProperty("USER-AGENT","Mozilla/5.0");
con.setDoInput(true);
con.setDoOutput(true);
// Log.v(TAG, "utilityBOopreation:Connect: Valore della connessione : " + con);
//return con;
} catch (MalformedURLException e) {
e.printStackTrace();
Log.v(TAG, "utilityBOopreation:Connect: La connessione non è andata a buon fine : " + e);
return null;
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "utilityBOopreation:Connect: La connessione non è andata a buon fine : " + e);
return null;
}
return con;
我创建mo json的类
public String packData(){
Log.v(TAG,"DataPackager:packData: Entro nel packData");
JSONObject jo= new JSONObject();
StringBuffer packedData =new StringBuffer();
try {
jo.put("ID",Id);
jo.put("GRM",GRM);
/ .
altri campi
./
Boolean FirstValue=true;
Iterator it=jo.keys();
Log.v(TAG,"DataPackager:packData: Creo il mio file Json ... " + jo);
do {
String Key=it.next().toString();
String value=jo.get(Key).toString();
if (FirstValue){
FirstValue=false;
}else {
packedData.append("&");
}
packedData.append(URLEncoder.encode(Key,"UTF-8"));
packedData.append("=");
packedData.append(URLEncoder.encode(value,"UTF-8"));
}while (it.hasNext());
Log.v(TAG,"DataPackager:packData: Il packData Prima di mandarlo via stream ... " + packedData);
return packedData.toString();
} catch (JSONException | UnsupportedEncodingException e) {
e.printStackTrace();
Log.v(TAG,"DataPackager:packData:non sono riuscito a creare il json ... " + e.getMessage());
}
return null;
}
而这是服务器上的php文件,只是POST的接收部分
$host = 'localhost';
$username = 'user';
$pwd = '';
$db = 'mioDB';
if (isset($_POST)){
$ID = $_POST['ID'];
$GRM = $_POST['GRM'];
/
altri valori
/
$response = array();
$connect = mysqli_connect($host,$username,$pwd,$db) or die ('Unabletp connect');
答:
0赞
B. Desai
3/29/2018
#1
作为以 json 格式接收的数据。它们不会使用 .你必须使用POST
file_get_contents("php://input")
;
$data_json = file_get_contents("php://input");
$data = json_decode($data_json,true);
然后执行以下操作
$ID = $data['ID'];
$GRM = $data['GRM'];
评论
0赞
Andrea
3/30/2018
你好,dispaice 我,但它还不起作用!我将插入另一条带有apache错误的注释.log !!!你能告诉我我哪里错了吗?我认为问题出在android上!谢谢!!我真的很绝望
0赞
Andrea
4/3/2018
格拉齐 @ B.Desai !!我已经进行了更改,错误已经消失了!!非常感谢!!问题是,当我尝试打印我应该在帖子中收到的变量的值时,我是空的!事实上,在我的回答中,我已经包含了修改后的代码以及用于创建数据库的变量值和查询字符串的打印!我认为问题出在我的 android 代码中,因为我知道我没有发送任何东西!你能看一看并帮助我吗?
评论