关于如何将json对象从我的android应用程序发送到数据库,我 有点茫然
json
由于我是新手,所以我不太确定哪里出了问题,我从中提取了数据XML,我不知道如何将对象发布到我们的服务器。
XML
任何建议将不胜感激
package mmu.tom.linkedviewproject; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; /** * Created by Tom on 12/02/2016. */ public class DeviceDetailsActivity extends AppCompatActivity { private EditText address; private EditText name; private EditText manufacturer; private EditText location; private EditText type; private EditText deviceID; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_device_details); ImageButton button1 = (ImageButton) findViewById(R.id.image_button_back); button1.setOnClickListener(new View.OnClickListener() { Class ourClass; public void onClick(View v) { Intent intent = new Intent(DeviceDetailsActivity.this, MainActivity.class); startActivity(intent); } }); Button submitButton = (Button) findViewById(R.id.submit_button); submitButton.setOnClickListener(new View.OnClickListener() { Class ourClass; public void onClick(View v) { sendDeviceDetails(); } }); setContentView(R.layout.activity_device_details); this.address = (EditText) this.findViewById(R.id.edit_address); this.name = (EditText) this.findViewById(R.id.edit_name); this.manufacturer = (EditText) this.findViewById(R.id.edit_manufacturer); this.location = (EditText) this.findViewById(R.id.edit_location); this.type = (EditText) this.findViewById(R.id.edit_type); this.deviceID = (EditText) this.findViewById(R.id.edit_device_id); } protected void onPostExecute(JSONArray jsonArray) { try { JSONObject device = jsonArray.getJSONObject(0); name.setText(device.getString("name")); address.setText(device.getString("address")); location.setText(device.getString("location")); manufacturer.setText(device.getString("manufacturer")); type.setText(device.getString("type")); } catch(Exception e){ e.printStackTrace(); } } public JSONArray sendDeviceDetails() { // URL for getting all customers String url = "http://52.88.194.67:8080/IOTProjectServer/registerDevice?"; // Get HttpResponse Object from url. // Get HttpEntity from Http Response Object HttpEntity httpEntity = null; try { DefaultHttpClient httpClient = new DefaultHttpClient(); // Default HttpClient HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); httpEntity = httpResponse.getEntity(); } catch (ClientProtocolException e) { // Signals error in http protocol e.printStackTrace(); //Log Errors Here } catch (IOException e) { e.printStackTrace(); } // Convert HttpEntity into JSON Array JSONArray jsonArray = null; if (httpEntity != null) { try { String entityResponse = EntityUtils.toString(httpEntity); Log.e("Entity Response : ", entityResponse); jsonArray = new JSONArray(entityResponse); } catch (JSONException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return jsonArray; } }
您需要使用一个AsyncTask类与服务器进行通信。像这样:
AsyncTask
这是您的onCreate方法。
onCreate
Button submitButton = (Button) findViewById(R.id.submit_button); submitButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { JSONObject postData = new JSONObject(); try { postData.put("name", name.getText().toString()); postData.put("address", address.getText().toString()); postData.put("manufacturer", manufacturer.getText().toString()); postData.put("location", location.getText().toString()); postData.put("type", type.getText().toString()); postData.put("deviceID", deviceID.getText().toString()); new SendDeviceDetails().execute("http://52.88.194.67:8080/IOTProjectServer/registerDevice", postData.toString()); } catch (JSONException e) { e.printStackTrace(); } } });
这是您的活动课程中的新课程。
private class SendDeviceDetails extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { String data = ""; HttpURLConnection httpURLConnection = null; try { httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream()); wr.writeBytes("PostData=" + params[1]); wr.flush(); wr.close(); InputStream in = httpURLConnection.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(in); int inputStreamData = inputStreamReader.read(); while (inputStreamData != -1) { char current = (char) inputStreamData; inputStreamData = inputStreamReader.read(); data += current; } } catch (Exception e) { e.printStackTrace(); } finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } return data; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Log.e("TAG", result); // this is expecting a response code to be sent from your server upon receiving the POST data } }
这行:httpURLConnection.setRequestMethod("POST");将其作为HTTP POST请求,应在您的服务器上作为POST请求处理。
httpURLConnection.setRequestMethod("POST");
然后,在服务器上,您需要根据HTTP POST请求中发送的“ PostData”创建一个新的JSON对象。如果您让我们知道您的服务器上使用哪种语言,那么我们可以为您编写一些代码。