首页 > 解决方案 > 如何使用 HttpURLConnection 在 android 中使用 POST 方法上传数据?

问题描述

我有 2 个 json 数组,其中一个是字符串格式的图像和位图名称。另一种是带有一些用户数据的字符串。如何将该数据传递到 laravel 站点?

JSONArray jsonImage = new JSONArray();

for(int i=0; i<imageList.size(); i++){
    JSONObject imgObj = new JSONObject();
    String imageBitmap = imageList.get(i).getimageBitmap();
    String imageName = imageList.get(i).getImage_name();
    imgObj.put("imageName",imageName);
    imgObj.put("imageBitmap", imageBitmap);

    jsonImage.put(imgObj);
}

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    // TODO: Consider calling
}

Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();

Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = format.format(calendar.getTime());

final String jsonStringArray = jsonArray.toString();

final String jsonImageString= jsonImage.toString();

URL url = new URL(AppState.DEV_URL + AppState.DEV_API + "storeAnswer");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type","application/json");
conn.connect();

JSONObject data = new JSONObject();
data.put("token", Uri.encode(UserLocalStore.userLocalStore.getToken()));
data.put("latitude", Uri.encode(String.valueOf(latitude)));
data.put("longitude",Uri.encode(String.valueOf(longitude)));
data.put("answers", Uri.encode(jsonStringArray));
data.put("images", Uri.encode(jsonImageString));
data.put("time", Uri.encode(formattedDate));

OutputStreamWriter out = new   OutputStreamWriter(conn.getOutputStream());
out.write(data.toString());
out.close();

标签: androidlaravelposthttprequest

解决方案


推荐阅读