什么是场景
我想从Android向服务器发送多个ArrayList(通常为5个),并将其插入到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脚本。
例如,我想将这些arraylist发送到php script =
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; }
您可以对发送的其他数组重复此循环:)祝您好运!