gpt4 book ai didi

android - 使用 JSON 将 ArrayList 从 Android 发送到 PHP 脚本

转载 作者:行者123 更新时间:2023-11-29 03:49:38 25 4
gpt4 key购买 nike

场景是什么

我想将多个 ArrayList(通常是 5 个)从 android 发送到服务器,并想将其插入到 mysql 数据库中。

我成功做了什么

我已经使用 JSON 成功地将单个值和多个值从 Android 发送到 PHP 脚本

我已经使用 JSON 从 mysql 数据库接收到单个和多个记录到 android

这是从服务器插入和获取值的代码

 class TeacherLogin1 extends AsyncTask<Void, Void, Void> {

String name,pass;
Context contextt;
int idofteach = 0;
int codee = 0;

TeacherLogin1(String pass1,String name1,Context context)
{
name = name1;
pass = pass1;
contextt = context;
}

@Override
protected void onPreExecute() {
super.onPreExecute();
}


@Override
protected Void doInBackground(Void... arg0) {
codee = Authenticate(name,pass);

return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if(codee!=0)
{
Intent teachers = new Intent(context,TeachersView.class);
teachers.putExtra("TID", codee);
teachers.putExtra("TNAME", TeachName);
teachers.putExtra("sub1", subj1);
teachers.putExtra("sub2", subj2);
teachers.putExtra("sub3", subj3);
teachers.putExtra("sub4", subj4);
startActivity(teachers);
}
else
Toast.makeText(context, "Wrong Details", Toast.LENGTH_SHORT).show();
codee = 0;
}
}
public int Authenticate(String name,String Pass)
{

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

// put the values of id and name in that variable
nameValuePairs.add(new BasicNameValuePair("name",name));
nameValuePairs.add(new BasicNameValuePair("pass",Pass));



try
{
HttpClient httpclient = new DefaultHttpClient();
ScriptsFilePath a = new ScriptsFilePath();
HttpPost httppost = new HttpPost(a.TeacherAuthen);

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("pass 1", "connection success ");
}
catch(Exception e)
{
Log.e("Fail 1", e.toString());
}

try
{
BufferedReader reader = new BufferedReader
(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.e("pass 2", "connection success ");
}
catch(Exception e)
{
Log.e("Fail 2", e.toString());
}



try {

JSONObject jsonResponse = new JSONObject(result);
if(jsonResponse != null)
{
JSONArray jsonMainNode = jsonResponse.optJSONArray("GetTeacher");

for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
code = jsonChildNode.optInt("ID");
TeachName= jsonChildNode.optString("Name");
subj1= jsonChildNode.optString("subject1");
subj2= jsonChildNode.optString("subject2");
subj3= jsonChildNode.optString("subject3");
subj4= jsonChildNode.optString("subject4");
}

}

} catch (JSONException e) {
// Toast.makeText(getApplicationContext(), "Error" + e.toString(),
// Toast.LENGTH_SHORT).show();
}
return code;


}

和TeacherAuthen.php脚本

<?php
error_reporting(E_ALL ^ E_DEPRECATED);
$host="localhost";
$uname="root";
$pwd='';
$db="examsystem";

$con = mysql_connect($host,$uname,$pwd) or die("connection failed");
mysql_select_db($db,$con) or die("db selection failed");

if(isset($_REQUEST)){
$name=$_REQUEST['name'];
$pass=$_REQUEST['pass'];}

$flag['code']=0;
$name1['code1'] = "sdf";

$sql = "SELECT * FROM teachers WHERE Username ='$name' and Pass='$pass'";
$result = mysql_query($sql);
$json = array();

if(mysql_num_rows($result)){
while($row=mysql_fetch_assoc($result)){
$json['GetTeacher'][]=$row;
}
}
echo json_encode($json);
mysql_close($con);
?>

我卡在哪里

我不知道如何将 ArrayList 从 android 发送到 PHP 脚本。

例如,我想将这些数组列表发送到 php 脚本 =

ArrayList<String> Questions=  new ArrayList<String>();
ArrayList<String> A1= new ArrayList<String>();
ArrayList<String> A2= new ArrayList<String>();
ArrayList<String> A3= new ArrayList<String>();
ArrayList<String> A4= new ArrayList<String>();

然后在 PHP 脚本中我想像这样插入

"INSERT INTO `Question` (`ID` ,`Question` ,`A1` ,`A2` ,`A3` , `A4` ) VALUES (NULL, '$Question', '$A1', '$A2', '$A3' ,'$A4'); "

如果我能够发送一个 arrayList,那么我想我可以找到一种方法来完成上述操作

谢谢你的时间

最佳答案

这是您的数组:您可以根据示例中的需要创建更多数组。

ArrayList<String> contact = new ArrayList<String>();

然后,创建一个 JSONObject 类型的 JSONcontacts 变量来存储这个数组到这个对象中

JSONObject JSONcontacts = new JSONObject();

现在,遍历该联系人数组中的所有元素并将其存储在 JSONcontacts 中

//Loop through array of contacts and put them to a JSONcontact object
for (int i = 0; i < contact.size(); i++) {
try {
JSONcontacts.put("Count:" + String.valueOf(i + 1), contact.get(i));
} catch (JSONException e) {
e.printStackTrace();
}
}

假设您创建了许多数组,您可能已经创建了这些数组,现在您必须将它们全部放入 1 个 JSON 中。所以创建一个 JSONObject() 类型的 EverythingJSON 变量

JSONObject EverythingJSON = new JSONObject();

现在将所有联系人数组和其他数组放入其中,然后按上述方式循环遍历它们:

EverythingJSON.put("contact", JSONcontacts);
EverythingJSON.put("something", JSONsoemthing);
EverythingJSON.put("else", JSONelse);

现在这是将它们发送到 PHP 服务器的 AsynchTask:

new AsyncTask() {
//String responseBody = "";
@SuppressWarnings("unused")
protected void onPostExecute(String msg) {
//Not Needed
}

protected Object doInBackground(Object... params) {
//Create Array of Post Variabels
ArrayList<NameValuePair> postVars = new ArrayList<NameValuePair>();

//Add a 1st Post Value called JSON with String value of JSON inside
//This is first and last post value sent because server side will decode the JSON and get other vars from it.
postVars.add(new BasicNameValuePair("JSON", EverythingJSON.toString());

//Declare and Initialize Http Clients and Http Posts
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(Config.OnlineAPI);

//Format it to be sent
try {
httppost.setEntity(new UrlEncodedFormEntity(postVars));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

/* Send request and Get the Response Back */
try {
HttpResponse response = httpclient.execute(httppost);
String responseBody = EntityUtils.toString(response.getEntity());
} catch (ClientProtocolException e) {
e.printStackTrace();
Log.v("MAD", "Error sending... ");
} catch (IOException e) {
e.printStackTrace();
Log.v("MAD", "Error sending... ");
}
return null;
}
}.execute(null, null, null);

现在在 PHP 服务器端,您可以像这样循环遍历此 JSON:首先,从 POST 获取 JSON 并将其存储在 var 中:

//Receive JSON
$JSON_Received = $_POST["JSON"];

现在从 JSON 解码它:

//Decode Json
$obj = json_decode($JSON_Received, true);

这是遍历联系人数组并从中获取键和值的循环:

foreach ($obj['contact'] as $key => $value) 
{
//echo "<br>------" . $key . " => " . $value;
}

你可以为你发送的其他数组重复这个循环:)祝你好运!

关于android - 使用 JSON 将 ArrayList 从 Android 发送到 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com