Получение JSON с помощью AsyncTask с сервера Python возвращает «Конец ввода при символе 0»

У меня проблема с моими AsyncTasks. По сути, я выполняю две AsyncTasks, выполняемые последовательно, и у меня всегда возникают ошибки при запуске приложения. Я использую сервер Flask Python для получения данных с помощью API. У меня есть 2 набора объектов, которые мне нужно получить с сервера в формате JSON. В моем JSON на сервере я называю корневой элемент именем нужного мне набора (roles и device_types), оба из которых содержат массив объектов. Когда я получаю данные в своем клиентском JAVA (приложении для Android), я проверяю, является ли корневой элемент необходимым элементом, и помещаю их в Arraylist соответствующих ему объектов. Проблема в том, что второй запрос возвращает ошибку. (Примечание: я разместил свои запросы AsyncTask.execute в onCreate, потому что при загрузке активности я добавлю json, полученный как адаптер, в Listview).

когда я регистрирую свой ответ json, я заметил, что он неполный. При печати с сервера он готов.

D/roles json: [
    {
        "roles": [
            {
                "name": "Anti-Spam",
                "slug": "anti-spam",
                "color": "f44336",
                "vm_role": false,
                "id": 23
            },
            {
                "name": "Backup",
                "slug": "backup",
                "color": "ffc107",
                "vm_role": true,
                "id": 13
            },
            {
                "name": "Blade Center",
                "slug": "blade-center",
                "color": "2f6a31",
                "vm_role": false,
                "id": 26
            },
            {
                "name": "Console Server - Mangement Server",
                "slug": "console-server-mangement-server",
                "color": "009688",
                "vm_role": false,
                "id": 1
            },
            {
                "name": "Deflecteur",
                "slug": "deflecteur",
                "color": "00bcd4",
                "vm_role": false,
                "id": 42
            },
            {
                "name": "Disk",
                "slug": "disk",
                "color": "aa1409",
                "vm_role": false,
                "id": 34
            },
            {
                "name": "DS3524 Battery",
                "slug": "ds3524-battery",
                "color": "aa1409",
                "vm_role": true,
                "id": 37
            },
            {
                "name": "DS3524 Controller",
                "slug": "ds3524-controller",
                "color": "ffeb3b",
                "vm_role": true,
                "id": 35
            },
            {
                "name": "DS3524 PowerFAN",
                "slug": "ds3524-powerfan",
                "color": "aa1409",
                "vm_role": true,
                "id": 36
            },
            {
                "name": "Equipements Tiers",
                "slug": "equipements-tiers",
                "color": "111111",
                "vm_role": true,
                "id": 28
            },
            {
                "name": "Firewall Client",
                "slug": "firewall-client",
                "color": "f44336",
                "vm_role": true,
                "id": 33
            },
            {
                "name": "Firewall OMT",
                "slug": "firewall-omt",
                "color": "f44336",
                "vm_role": true,
                "id": 6
            },
            {
                "name": "Media Gateway",
                "slug": "media-gateway",
                "color": "cddc39",
                "vm_role": true,
                "id": 11
            },
            {
                "name": "Mobile NSS - Data Gateway",
                "slug": "mobile-nss-data-gateway",
                "color": "3f51b5",
                "vm_role": true,
                "id": 47
            },
            {
                "name": "Mobile NSS - DSR",
                "slug": "mobile-nss-dsr",
                "color": "3f51b5",
                "vm_role": true,
                "id": 49
            },
            {
                "name": "Mobile NSS - Messaging",
                "slug": "mobile-nss-messaging",
                "color": "3f51b5",
                "vm_role": true,
                "id": 44
            },
            {
                "name": "Mobile NSS - Mobility Management",
                "slug": "mobile-nss-mobility-management",
                "color": "3f51b5",
                "vm_role": true,
                "id": 45
            },
            {
                "name": "Mobile NSS - OAM",
                "slug": "mobile-nss-oam",
                "color": "3f51b5",
                "vm_role": true,
                "id": 51
            },
            {
                "name": "Mobile NSS - OTA",
                "slug": "mobile-nss-ota",
                "color": "3f51b5",
                "vm_role": true,
                "id": 43
            },
            {
                "name": "Mobile NSS

Ошибка при запуске Android Studio при запуске

AsyncTask roles= new form.HTTPAsyncTask().execute("http://10.0.2.2:5000/get_role_id");

W/System.err: org.json.JSONException: End of input at character 0 of at org.json.JSONTokener.syntaxError(JSONTokener.java:449) at org.json.JSONTokener.nextValue(JSONTokener.java:97) at org.json.JSONArray.(JSONArray.java:92)

JSON, напечатанный с сервера Python Flask

[{"roles": [{"name": "Anti-Spam", "slug": "anti-spam", "color": "f44336", "vm_role": false, "id": 23}, {"name": "Backup", "slug": "backup", "color": "ffc107", "vm_role": true, "id": 13}, {"name": "Blade Center", "slug": "blade-center", "color": "2f6a31", "vm_role": false, "id": 26}, {"name": "Console Server - Mangement Server", "slug": "console-server-mangement-server", "color": "009688", "vm_role": false, "id": 1}, {"name": "Deflecteur", "slug": "deflecteur",...

Код:

private String HttpPost(String myUrl) throws IOException, JSONException {
    String result = "";

    URL url = new URL(myUrl);

    // 1. create HttpURLConnection
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");

    // 2. build JSON object
    JSONObject jsonObject = buidJsonObject();

    // 3. add JSON content to POST request body
    setPostRequestContent(conn, jsonObject);

    // 4. make POST request to the given URL
    conn.connect();
    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"),8);
    StringBuilder sb = new StringBuilder();
    String output;
    while ((output = br.readLine()) != null) {
        sb.append(output);
    }



    return sb.toString();

}


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_form);
    all=new ArrayList<DeviceType>();
    listTypes=new ArrayList<DeviceType>();
    listRoles=new ArrayList<Roles>();
    if (checkNetworkConnection()){

       AsyncTask dtypes= new form.HTTPAsyncTask().execute("http://10.0.2.2:5000/get_dtypes");
       AsyncTask roles= new form.HTTPAsyncTask().execute("http://10.0.2.2:5000/get_role_id");

       }
    }
    else{
        Toast.makeText(this, "Not Connected!", Toast.LENGTH_SHORT).show();}


}




  private class HTTPAsyncTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
        // params comes from the execute() call: params[0] is the url.
        try {
            try {
                return HttpPost(urls[0]);
            } catch (JSONException e) {
                e.printStackTrace();
                return "Error!";
            }
        } catch (IOException e) {
            return "Unabdgdsle to retrieve web page. URL may be invalid.";
        }
    }

    protected void onPostExecute(String result) {

        String N1=null;
        JSONObject obj=null;
        JSONArray temparr=null;
        JSONArray temparr2=null;
        JSONArray arr=null;


        try {

            arr = new JSONArray(result);




            if (arr.getJSONObject(0).optString("device_types")!=null){
                //System.out.println("types: "+arr.getJSONObject(0).optString("device_types"));
                temparr=new JSONArray(arr.getJSONObject(0).optString("device_types"));
                System.out.println("got device types");

                for(int i=0; i < temparr.length(); i++) {
                    //obj = arr.getJSONObject(i);

                    String m=temparr.getJSONObject(i).getString("manufacturer");
                    int mid=temparr.getJSONObject(i).getInt("manufacturerid");
                    String mod=temparr.getJSONObject(i).getString("model");
                    String pn=temparr.getJSONObject(i).getString("part_number");
                    int id=temparr.getJSONObject(i).getInt("id");
                    listTypes.add(new DeviceType(m,mid,mod,pn,id));

                    //arrTypes[i]= arr.getJSONObject(i);

                }
                System.out.println(listTypes.toString());
               System.out.println(listTypes.size());

            }

            if (arr.getJSONObject(0).optString("roles")!=null){
                //System.out.println("roles: "+arr.getJSONObject(0).optString("roles"));
                temparr2=new JSONArray(arr.getJSONObject(0).optString("roles"));
                System.out.println("got roles");

                for(int i=0; i < temparr2.length(); i++) {
                    //obj = arr.getJSONObject(i);

                    String c=temparr2.getJSONObject(i).getString("color");
                    int id=temparr2.getJSONObject(i).getInt("id");
                    String n=temparr2.getJSONObject(i).getString("name");
                    String s=temparr2.getJSONObject(i).getString("slug");

                    listRoles.add(new Roles(c,id,n,s));


                    //arrTypes[i]= arr.getJSONObject(i);

                }
                System.out.println(listRoles.toString());
                System.out.println(listRoles.size());
            }



        } catch (JSONException e) {
            e.printStackTrace();
        }


private JSONObject buidJsonObject() throws JSONException {

    JSONObject jsonObject = new JSONObject();
    jsonObject.accumulate("token", "1");

    return jsonObject;
}

private void setPostRequestContent(HttpURLConnection conn,
                                   JSONObject jsonObject) throws IOException {

    OutputStream os = conn.getOutputStream();
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
    writer.write(jsonObject.toString());
    Log.i(login.class.toString(), jsonObject.toString());
    writer.flush();
    writer.close();
    os.close();
}

проверьте JSON, эта ошибка возникает из-за JSON

Harpz 11.10.2018 11:47

POST вы заполняете JSON .. Кажется, проблема с JSON

Ali Ahmed 11.10.2018 11:58

Я только что заметил, что когда я регистрирую свой JSON, он не является полным, это нормально?

prog-etien.io 11.10.2018 12:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
48
0

Другие вопросы по теме