Ошибка сборки в Android Studio – org.json.JSONExceptionJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка сборки в Android Studio – org.json.JSONException

Сообщение Anonymous »

Я спросил gpt в чате и теперь не знаю, почему возникла ошибка.
Я столкнулся со следующей ошибкой при разработке приложения в Android Studio.
Сообщение об ошибке:
org.json.JSONException: нет значения для выбора

Код: Выделить всё

FATAL EXCEPTION: AsyncTask #2
Process: com.example.chatgptapp, PID: 7791
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(AsyncTask.java:415)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:381)
at java.util.concurrent.FutureTask.setException(FutureTask.java:250)
at java.util.concurrent.FutureTask.run(FutureTask.java:269)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.RuntimeException: org.json.JSONException: No value for choices
at com.example.chatgptapp.MainActivity$HttpAsyncTask.doInBackground(MainActivity.java:107)
at com.example.chatgptapp.MainActivity$HttpAsyncTask.doInBackground(MainActivity.java:65)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
at java.lang.Thread.run(Thread.java:1012) 
Caused by: org.json.JSONException:  No value for choices
at org.json.JSONObject.get(JSONObject.java:398)
at org.json.JSONObject.getJSONArray(JSONObject.java:593)
at com.example.chatgptapp.MainActivity$HttpAsyncTask.doInBackground(MainActivity.java:100)
at com.example.chatgptapp.MainActivity$HttpAsyncTask.doInBackground(MainActivity.java:65) 
at android.os.AsyncTask$3.call(AsyncTask.java:394) 
at java.util.concurrent.FutureTask.run(FutureTask.java:264) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
at java.lang.Thread.run(Thread.java:1012) 
Код[build.gradle.kts(:app)]

Код: Выделить всё

plugins {
id("com.android.application")
}

android {
namespace = "com.example.chatgptapp"
compileSdk = 34

defaultConfig {
applicationId = "com.example.chatgptapp"
minSdk = 29
targetSdk = 33
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}

dependencies {
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.12.0")
implementation("androidx.constraintlayout:constraintlayout:2.2.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
implementation("com.squareup.okhttp3:okhttp:4.9.0")
implementation("org.json:json:20210307")
}
Код[AndroidManifest.xml] Код[activity_main.xml] Код[MainActivity.java]:

Код: Выделить всё

package com.example.chatgptapp;

import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import okhttp3.*;
import org.json.JSONObject;
import java.io.IOException;
import org.json.JSONArray;
import org.json.JSONException;

public class MainActivity extends AppCompatActivity {

private EditText editTextUserInput;
private Button buttonSend;
private TextView textViewResponse;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

editTextUserInput = findViewById(R.id.editTextUserInput);
buttonSend = findViewById(R.id.buttonSend);
textViewResponse = findViewById(R.id.textViewResponse);

buttonSend.setOnClickListener(view -> {
String userInput = editTextUserInput.getText().toString();
callChatGPTAPI(userInput);
});
}

private void callChatGPTAPI(String userInput) {
String apiKey = "For security, hide my apiKey";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
JSONObject json = new JSONObject();
try {
json.put("model", "text-davinci-003");
json.put("prompt", userInput);
json.put("max_tokens", 100);

RequestBody body = RequestBody.create(mediaType, json.toString());
Request request = new Request.Builder()
.url("https://api.openai.com/v1/completions")
.post(body)
.addHeader("Authorization", "Bearer " + apiKey)
.build();

client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
runOnUiThread(() -> textViewResponse.setText("Error: " + e.getMessage()));
}

@Override
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) {
runOnUiThread(() -> textViewResponse.setText("Error: "  + response.message()));
return;
}

String responseData = response.body().string();
Log.d("API Response", responseData);

try {
JSONObject jsonResponse = new JSONObject(responseData);
if (jsonResponse.has("choices")) {
String reply = jsonResponse.getJSONArray("choices")
.getJSONObject(0)
.getString("text");
runOnUiThread(() -> textViewResponse.setText(reply));
} else {
runOnUiThread(() -> textViewResponse.setText("Error: No choices found in the response"));
}
} catch (JSONException e) {
runOnUiThread(() -> textViewResponse.setText("Error: " + e.getMessage()));
}
}
});

} catch (Exception e) {
textViewResponse.setText("Error: " + e.getMessage());
}
}
}
Что я пробовал:
Я проверил LogCat на наличие JSONResponse, но JSONResponse не было.
Буду признателен за любой совет. Спасибо за вашу доброту!

Подробнее здесь: https://stackoverflow.com/questions/793 ... nexception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»