카테고리 없음

코틀린 retrofit2 php에서 데이터 받아오기

Machine_웅 2018. 12. 4. 15:16
728x90
반응형

<안드로이드 >

 

// ( 친구 옵션 ) 검색
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로 받을 것으로 지정한후에 사용했다.


728x90
반응형