Я столкнулся со следующей ошибкой при разработке приложения в 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)
Код: Выделить всё
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")
}
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
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
Мобильная версия