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)]