Как получить выгоду от шлюза aws api в студию android (java)
Я не понимаю, почему мои выходные данные, полученные моим приложением Android от шлюза API, похожи на этот dummypackage.model.Resultur@d0cce8e, а не в строке или json. как я могу получить читаемые данные?
Я установил фиктивную лямбда-функцию, которая отправляет ответ.
return {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*"
},
body:1
}
когда вызывается метод API get.
Это модель, которую я установил в теле ответа моего метода:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type":"object",
"properties":{
"output":{
"$ref": "https://apigateway.amazonaws.com/restapis/3pzxzxz27/models/Output"
}
},
"title":"Result"
}
Выходная модель
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type":"object",
"properties":{
"output":{
"$ref": "https://apigateway.amazonaws.com/restapis/3pvgc7ic27/models/Output"
}
},
"title":"Result"
}
Класс «resultur», созданный в SDK:
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package dummypackage.model;
import com.google.gson.annotations.SerializedName;
public class Resultur {
@SerializedName("output")
private Output output = null;
public Resultur() {
}
public Output getOutput() {
return this.output;
}
public void setOutput(Output output) {
this.output = output;
}
}
И класс вывода таков:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package dummypackage.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal;
public class Output {
@SerializedName("Output")
private BigDecimal output = null;
public Output() {
}
public BigDecimal getOutput() {
return this.output;
}
public void setOutput(BigDecimal output) {
this.output = output;
}
}
Я использовал этот код в своей основной деятельности, чтобы получить результат:
package com.example.apiapplication3;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.amazonaws.mobileconnectors.apigateway.ApiClientFactory;
import org.json.JSONObject;
import dummypackage.DummyapiClient;
import dummypackage.model.Resultur;
public class MainActivity extends AppCompatActivity {
Button button;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ApiClientFactory factory = new ApiClientFactory();
final DummyapiClient client = factory.build(DummyapiClient.class);
button = findViewById(R.id.button);
String values;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Resultur output = client.messageGet();
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, output, Toast.LENGTH_SHORT).show(); // Display the value in a Toast message
}
});
// Log.w("output", "s" + output);
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
});
}
}
Что я делаю не так? также, где можно научиться использовать aws api sdk для android? (я следовал всем инструкциям документации aws, но все равно застрял)
1 ответ
Таким образом, вам необходимо переопределить метод toString() в ваших классах Resultur и Output и использовать output.getOutput().toString() при отображении всплывающего сообщения. Чтобы узнать, как использовать AWS API SDK для Android, вы можете обратиться к https://aws-amplify.github.io/aws-sdk-android/docs/reference/ .