<안드로이드 >
// ( 친구 옵션 ) 검색
fun searchFriend(targetId : String, mode : String) : friend_data{
var resultFriendData :friend_data = friend_data("실패","실패","실패","실패","실패","실패","실패","실패")
var gson: Gson = GsonBuilder()
.setLenient()
.create()
//creating retrofit object
var retrofit =
Retrofit.Builder()
.baseUrl(ipAddress)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
//creating our api
var server = retrofit.create(retrofit_interface::class.java)
server.friendOption2(mode,targetId).enqueue(object : Callback<ArrayList<friend_data>>{
override fun onFailure(call: Call<ArrayList<friend_data>>, t: Throwable) {
Log.d("친구 검색","실패")
Log.d("친구 검색", ""+t.printStackTrace())
Log.d("친구 검색", ""+ t.localizedMessage)
}
override fun onResponse(call: Call<ArrayList<friend_data>>, response: retrofit2.Response<ArrayList<friend_data>>) {
Log.d("친구 검색","성공"+response.body().toString())
var list: List<friend_data> = response.body()!!
Log.d("친구 검색",list.get(0).friend_Email.toString())
}
})
return resultFriendData
}
<데이터 클래스 >
class friend_data {
@SerializedName("friend_Email")
@Expose
var friend_Email : String
@SerializedName("friend_Nick")
@Expose
var friend_Nick : String
@SerializedName("friend_Profile")
@Expose
var friend_Profile : String
@SerializedName("friend_ProfileBackGround")
@Expose
var friend_ProfileBackGround : String
@SerializedName("friend_Status")
@Expose
var friend_Status : String
@SerializedName("friend_PhoneNumber")
@Expose
var friend_PhoneNumber : String
@SerializedName("friend_phoneMode")
@Expose
var friend_phoneMode : String
@SerializedName("friend_searchMode")
@Expose
var friend_searchMode : String
constructor(friend_Email: String, friend_Nick: String, friend_Profile: String, friend_ProfileBackGround: String, friend_Status: String, friend_PhoneNumber: String, friend_phoneMode: String, friend_searchMode: String) {
this.friend_Email = friend_Email
this.friend_Nick = friend_Nick
this.friend_Profile = friend_Profile
this.friend_ProfileBackGround = friend_ProfileBackGround
this.friend_Status = friend_Status
this.friend_PhoneNumber = friend_PhoneNumber
this.friend_phoneMode = friend_phoneMode
this.friend_searchMode = friend_searchMode
}
}
<<인터페이스 >>
// 친구검색
@FormUrlEncoded
@POST("friendOption/settingFriend.php/")
fun friendOption2(
@Field("mode") userId : String,
@Field("targetId") searchMode : String
) : Call<ArrayList<friend_data>>
<php 코드>
//친구 검색
function findFriend($targetId){
// 친구 객체를 돌려준다.
$id2 = str_replace("\"","",$targetId);
$conn = mysqli_connect(); // mysql 연결 주소명 db 아이디 db 비번 디비명
$getData = "SELECT * FROM `useraccount` WHERE `userId` = '{$id2}' ";
$result = mysqli_query($conn,$getData); // 쿼리 날리기
$resultUserData = array();
$loginUserNick ="";
$loginUserProfile="";
$loginUserProfileBackGround="";
$loginUserPhoneNum="";
$loginUserStatusMessage="";
$searchM="";
$phoneM="";
while($userData = $result ->fetch_array()){
// $loginUserId;
$loginUserNick = $userData['userNick'];
if($loginUserNick == "" OR $loginUserNick == null){
$loginUserNick ="닉네임없음";
}
$loginUserProfile = $userData['userProfile'];
if($loginUserProfile == "" OR $loginUserProfile == null){
$loginUserProfile ="프로필없음";
}
$loginUserProfileBackGround = $userData['userProfileBackground'];
if($loginUserProfileBackGround == "" OR $loginUserProfileBackGround == null){
$loginUserProfileBackGround ="배경없음";
}
$loginUserPhoneNum = $userData['userPhone'];
if($loginUserPhoneNum == "" OR $loginUserPhoneNum == null){
$loginUserPhoneNum ="번호없음";
}
$loginUserStatusMessage = $userData['statusMessage'];
if($loginUserStatusMessage == "" OR $loginUserStatusMessage == null){
$loginUserStatusMessage ="상태메세지없음";
}
$searchM = $userData['searchMode'];
$phoneM = $userData['openPhoneMode'];
array_push($resultUserData,array(
'friend_Email'=>$targetId,
'friend_Nick' => $loginUserNick,
'friend_Profile' => $loginUserProfile,
'friend_ProfileBackGround' =>$loginUserProfileBackGround,
'friend_Status' => $loginUserStatusMessage,
'friend_PhoneNumber' =>$loginUserPhoneNum,
'friend_phoneMode' => $phoneM,
'friend_searchMode' => $searchM
)
);
}
// // 제이슨으로 인코딩
header('Content-Type: application/json; charset=utf8');
$json = json_encode($resultUserData,JSON_PRETTY_PRINT+JSON_UNESCAPED_UNICODE);
return $json;
}
발생하는 이슈 중에
java.lang.IllegalStateException:
Expected BEGIN_OBJECT but was BEGIN_ARRAY
오브젝트를 예상했는데 ARRAY가 왓다 라는 의미로 대충 해석하자면.
안드로이드에서 response할때 call 파라미터 타입이 그냥 단순한 객체 일경우 발생했다.
해결 : ArrayList<객체> 를 call로 받을 것으로 지정한후에 사용했다.