Cannot convert argument 4 from int to String

extends Control # Extending Control

Define API URLs

var base_url = “https://lms.jinhyung.kim/api/quiz/
var chapter_id = 1 # Assuming chapter 1 for example
var submit_url = base_url + str(chapter_id) + “/submit”

Define HTTPRequest and RichTextLabel nodes

@onready var http_request = $HTTPRequest
@onready var rich_text_label = $RichTextLabel # Get RichTextLabel node

When the scene is ready, fetch quiz questions for the specified chapter

func _ready():
# Get jwt_token from globals.gd
var token = Globals.jwt_token
get_quiz_questions(token)

Function to fetch quiz questions for a chapter

func get_quiz_questions(token):
var url = base_url + str(chapter_id) # Construct the request URL
var headers = ["Authorization: Bearer " + token] # Set Authorization header
http_request.request(url, headers, true, HTTPClient.METHOD_GET) # Send GET request without fourth parameter
http_request.connect(“request_completed”, Callable(self, “_on_get_quiz_request_completed”)) # Connect signal

Handle signal when quiz questions request is completed

func _on_get_quiz_request_completed(result, response_code, headers, body):
if response_code == 200:
var json = JSON.new() # Instantiate JSON class
var json_result = json.parse(body.get_string_from_utf8())
if json_result.error == OK:
var quiz_questions = json_result.result
print("Quiz questions: ", quiz_questions)

		# Display the questions in the RichTextLabel
		var display_text = ""
		for i in range(quiz_questions.size()):
			var question = quiz_questions[i].content  # Get the question content
			display_text += str(i + 1) + ". " + question + "\n"  # Format question number and content
			for j in range(quiz_questions[i].options.size()):
				var option = quiz_questions[i].options[j].content  # Get option content
				# Generate option letters (a, b, c, d...)
				var option_letter = String(char(97 + j))  # 97 is the ASCII value for 'a'
				display_text += "   " + option_letter + ") " + option + "\n"

		# Set the quiz content to the RichTextLabel
		rich_text_label.text = display_text

		# Simulate user answering and submit answers
		submit_quiz_answers(quiz_questions)
	else:
		print("JSON parse error")
else:
	print("Error fetching quiz questions: ", response_code)

Function to submit answers

func submit_quiz_answers(quiz_questions):
var token = Globals.jwt_token # Get token from Globals

# Construct the answer dictionary (Simulating user selections)
var answers = {
	"answers": [
		{ "quizId": quiz_questions[0].id, "optionId": quiz_questions[0].options[1].id },  # Assume the user selects the second option for the first question
		{ "quizId": quiz_questions[1].id, "optionId": quiz_questions[1].options[3].id }   # Assume the user selects the fourth option for the second question
	]
}

# Convert the answer dictionary to a JSON string
var json_data = JSON.stringify(answers)

# Set request headers
var headers = ["Authorization: Bearer " + token, "Content-Type: application/json"]

# Send POST request, ensuring the fourth parameter is a JSON string
http_request.request(submit_url, headers, true, HTTPClient.METHOD_POST, json_data)

# Connect the signal for request completion
http_request.connect("request_completed", Callable(self, "_on_submit_quiz_request_completed"))

Handle signal when quiz submission request is completed

func _on_submit_quiz_request_completed(result, response_code, headers, body):
if response_code == 200:
var json = JSON.new() # Instantiate JSON class
var json_result = json.parse(body.get_string_from_utf8())
if json_result.error == OK:
var submission_result = json_result.result
print("Submission result: ", submission_result)
# Display submission results
rich_text_label.text += “\n\nQuiz submission results:\n”
rich_text_label.text += "Correct Answers: " + str(submission_result.correctAnswers) + “\n”
rich_text_label.text += "Total Score: " + str(submission_result.totalScore)
else:
print(“JSON parse error”)
else:
print("Error submitting answers: ", response_code)

Please format code properly in question.(select all code and press ctrl+e)

And in which line are you getting error ?
It seems like you are passing a integer as an argument (4) in http request.

I think error is in this line. Update it like this( I have removed true argument as that seemed unnecessary)

http_request.request(url, headers, HTTPClient.METHOD_GET)
1 Like

Thank you very much ㅜㅜ

1 Like

If your issue is resolved, then you can mark my post as solution.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.