I want to add data to Mysql via php party. But I keep failing. Check the data on the website. Still no solution. Where am I going wrong?
I tried the following and it doesn't seem to fix the problem. How to fix 'Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $' error in Android Studio and Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $
I get another error, java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ from this error Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $. Adding GsonBuilder() .
I use //... to minimize the code.
dependencies
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation "com.squareup.okhttp3:logging-interceptor:3.3.1"
implementation 'com.google.code.gson:gson:2.8.5'
layout
<EditText
    android:id="@+id/editText1"
    //... />
<EditText
    android:id="@+id/editText2"
    //... />
<EditText
    android:id="@+id/editText3"
    //... />
<Button
    android:id="@+id/buttonInsert"
    //...
     />
MainActivity
    class MainActivity : AppCompatActivity() {
        //...
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            //...
            binding.buttonInsert.setOnClickListener {
insert(editText1.text.toString(),editText2.text.toString(),editText3.text.toString())
            }
        }
    
        fun insert(name:String,alamal:String,telepon:String){
            val ardData:APIinsertData = InsertServer().konekRetrofit2()!!.create(APIinsertData::class.java)
            val tampilData: Call<ResponseModel?>? = ardData.insertData(name,alamal,telepon)
            tampilData?.enqueue(object :Callback<ResponseModel?>{
                override fun onResponse(
                    call: Call<ResponseModel?>,
                    response: Response<ResponseModel?>
                ) {
                    //...
                }
    
                override fun onFailure(call: Call<ResponseModel?>, t: Throwable) {
                    Log.d("ex","==${t.message.toString()}")
                }
            })
        }
    }
interface APIinsertData
interface APIinsertData {
    @FormUrlEncoded
    @POST("insert.php")
    open fun insertData(
        @Field("name")name:String,
        @Field("alamal")alamal:String,
        @Field("telepon")telepon:String
    ): Call<ResponseModel?>?
}
InsertServer
class InsertServer {
    private val baseURL="http://10.0.2.2/insertData/"
    private var retrofit: Retrofit?=null
    var gson = GsonBuilder()
        .setLenient()
        .create()
    fun konekRetrofit2(): Retrofit? {
        if (retrofit==null){
            retrofit= Retrofit.Builder()
                .baseUrl(baseURL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build()
        }
        return retrofit
    }
}
data class
data class DataModel (
    val id:Int,
    val name:String,
    val alamal:String,
    val telepon:String
        )
data class ResponseModel (
    val kode:Int,
    val pesan:String,
    val data:List<DataModel>
        )
The current simple information of MySql comes from response.body().
[DataModel(id=1, name=abc, alamal=cde, telepon=123),
 DataModel(id=4, name=adc, alamal=111, telepon=222)]
 
    