Метод получения не работает после doInBackground - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь получить несколько методов получения для нескольких строк, которые будут возвращены после получения их из онлайн-файла JSON. Чтобы сэкономить место, я решил поместить все это в объект и вызвать их оттуда.

Объект:

public class InventoryItem extends AsyncTask<Void,Void,Void>{
        String imageURL = "";
        String itemName = "";
        String itemDesc = "";
        String itemRarity = "";
        String itemType = "";
        JSONObject itemJson = null;

        InventoryItem(JSONObject json){
            itemJson = json;
            Log.d("StringSubclass","Inventory Item");
        }

        @Override
        protected Void doInBackground(Void... voids) {
            Log.d("StringSubclass","doInBG Inventory Item");
            try {
                imageURL = "http://www.bungie.net"+itemJson.getJSONObject("Response").getJSONObject("data").getJSONObject("inventoryItem").getString("icon");
                Log.d("StringSubclass",imageURL);
                itemName = itemJson.getJSONObject("Response").getJSONObject("data").getJSONObject("inventoryItem").getString("itemName");
                itemDesc = itemJson.getJSONObject("Response").getJSONObject("data").getJSONObject("inventoryItem").getString("itemDescription");
                itemRarity = itemJson.getJSONObject("Response").getJSONObject("data").getJSONObject("inventoryItem").getString("tierTypeName");
                itemType = itemJson.getJSONObject("Response").getJSONObject("data").getJSONObject("inventoryItem").getString("itemTypeName");

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


            return null;
        }


        public String getItemType() {
            return itemType;
        }

        public String getItemRarity() {
            return itemRarity;
        }

        public String getItemDesc() {
            return itemDesc;
        }

        public String getItemName() {
            return itemName;
        }

        public String getImageURL() {
            return imageURL;
        }
    }

Проблема в том, что методы получения в конце отправляют обратно "", хотя я изменил их значение в doInBackground.

Вот как я вызвал getImageURL ():

InventoryItem subclass = new InventoryItem(makeJSON(HOST+"Manifest/6/"+subclassHash+"/"));
            subclass.execute();
            Log.d("StringSubclass",subclass.getImageURL());
            intentHome.putExtra("SubclassImageURL",subclass.getImageURL());

makeJSON ():

 public JSONObject makeJSON(String url){
        JSONObject json = null;
        String apiKey = "36c346318fa54fc6bc659ad6321a6d41";
        try {
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();

            con.setRequestMethod("GET");
            con.setRequestProperty("X-API-KEY", apiKey);

            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            String response = "";

            while ((inputLine = in.readLine()) != null) {
                response += inputLine;
            }

            in.close();

            JsonParser parser = new JsonParser();
            JsonObject gson = (JsonObject) parser.parse(response);
            json = new JSONObject(gson.toString());


        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {

            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return json;
    }

Я проверил URL, и он отлично работает в Chrome.

Любая помощь будет оценена. Я новичок в этом, поэтому, пожалуйста, объясните как можно больше. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...