Android Как создать json из массива и отправить на php сервер

Я работаю над приложением, которое генерирует список приложений установки, создает json и отправляет json на мой php сервер. На php сервере я должен получить все данные и обработать их соответственно.

Это код, который генерирует список установленных приложений:

List<PackageInfo> apps = getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA);

ArrayList<String[]> aux = new ArrayList();

for (int i = 0; i < apps.size(); i++)
{
if (apps.get(i).versionCode != 0 && ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 1))
{
String[] temp = new String[2];

String name = apps.get(i).packageName;
String versionName = apps.get(i).versionName;
temp[0] = name;
temp[1] = versionName;
aux.add(temp);
}
}

Это код для отправки его в виде json на php сервер:

try
{
JSONObject obj = new JSONObject();
obj.put("Applications", aux);
URL url = new URL(IPClass.SERVERPath + "update.php");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
//OutputStreamWriter writer = new OutputStreamWriter(os);

writer.write(String.valueOf(aux));
writer.flush();
writer.close();
os.close();


InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;

while ((line = reader.readLine()) != null) {
result.append(line);
}
Log.d("doInBackground(Resp)", result.toString());

}
catch(Exception ex)
{
Log.d("Ex", ex.toString());
}

Проблема в том, что JSON не генерируется должным образом, и во-вторых, как я могу получить его на PHP-сервере!

Любая помощь, пожалуйста!
Спасибо

1

Решение

Это будет работать нормально.

JSONArray installedList = new JSONArray();
for (int i = 0; i < apps.size(); i++)
{
if (apps.get(i).versionCode != 0 && ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 1))
{
String name = apps.get(i).packageName;
String versionName = apps.get(i).versionName;
JSONObject installedPackage = new JSONObject();
installedPackage.put("name", name);
installedPackage.put("versionName", versionName);
installedList.put(installedPackage);
}
}
String dataToSend = installedList.toString();

Добавление этой строки волшебным образом не превратит ваш массив в формат JSON.

conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

Вы должны создать JSONArray или JSONObject. Я рекомендую вам создать JSONArray с JSONObject.

3

Другие решения

Ты пробовал:

JSONObject json = new JSONObject();
json.putString("key", "value");

И сделать это String:

json.toString();
0