Как передать проанализированные данные json из одного класса в класс контроллера gui и установить текст метки равным данным? - PullRequest
0 голосов
/ 08 марта 2020

Привет! Я использую API MOV ie и хочу передать строку заголовка MOV ie метке в моем классе контроллера. Я проанализировал json и могу получить и распечатать заголовок mov ie, но я пытаюсь передать эту информацию классу контроллера, чтобы она отображалась в приложении gui.

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

package apipractice;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class ApiPractice{

    private static HttpURLConnection connection;

    private static String title;

    public static void main(String[] args) throws JSONException{

        BufferedReader reader; //Reads the input stream
        String line; //reads everyline
        StringBuffer responseContent = new StringBuffer(); //used to append each line and build the response content
        try {
            //Method 1: Java.net.HttpURLConnection
            URL url = new URL ("http://data.tmsapi.com/v1.1/movies/showings?startDate=2020-03-07&zip=27403&units=mi&imageSize=Lg&imageText=true&api_key=myapikey");
            try {
                connection = (HttpURLConnection) url.openConnection();

                //Request setup
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5000); //5000 ms = 5 secs
                connection.setReadTimeout(5000);

                int status = connection.getResponseCode();
                //System.out.println(status);

                if(status > 299){
                    reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
                    while((line = reader.readLine()) != null){
                        responseContent.append(line);
                    }
                    reader.close();
                } else {
                    reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    while((line = reader.readLine()) != null){
                        responseContent.append(line);
                    }
                    reader.close();
                }

               // System.out.println(responseContent.toString());
                parse(responseContent.toString());

            } catch (IOException ex) {
                Logger.getLogger(ApiPractice.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (MalformedURLException ex) {
            Logger.getLogger(ApiPractice.class.getName()).log(Level.SEVERE, null, ex);
        } finally{
            connection.disconnect();
        }

    }

    public static String parse(String responseBody) throws JSONException{
        JSONArray movies = new JSONArray(responseBody); 
            JSONObject mov1 = movies.getJSONObject(0);
            title = mov1.getString("title");

            System.out.println(title);
            title.toString();

        return null;
    }

    public static String getTitle(){
        return title;
    }
}

Этот класс может извлекать данные из json и распечатывать первый заголовок mov ie. Я хочу передать заголовок mov ie классу контроллера и установить его равным метке.

Вот мой класс контроллера.


package apipractice;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

/**
 * FXML Controller class
 *
 * @author 
 */
public class WorkController implements Initializable {



    @FXML
    private Label test;


    ApiPractice api = new ApiPractice();
    String title = api.getTitle();


    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO

        test.setText(title);

    }    


}

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

Спасибо.

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