안녕하세요. 현재 PHP에서 Android 기기로 JSON 객체를 보내는데 문제가 있습니다. 다른 사람과 전에이 작업을 수행했지만 제대로 작동했지만 이제는 작동하지 않습니다.PHP에서 Android로 JSON 게시
간단한 로그인 스크립트입니다. 입력 한 로그인 이메일과 비밀번호가 올바른지 여부에 따라 사용자의 데이터를 반환하거나 "false"를 반환해야합니다.
응답은 브라우저에서 시도했지만 내 동료에 따르면 안드로이드 개발 컴퓨터에서 볼 때 빈 배열을 얻습니다.
<?php
include('config.php');
include('functions.php');
include('password_hash_lib/password.php');
if (!isset($_REQUEST["device"]))
{
$Email = $_POST['Email'];
$Password = $_POST['Password'];
try
{
if (authenticate($Email, $Password))
{
echo "true";
}
else {
echo "false";
}
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
else if (isset($_REQUEST["device"]))
{
$device = $_REQUEST['device'];
$Email = $_REQUEST['email'];
$Password = $_REQUEST['password'];
if ($device == 'mobi')
{
try
{
if (authenticate($Email, $Password))
{
$curruser = explode("+", $_SESSION['sess_user_auth']);
$arr = new ArrayObject(Array(), ArrayObject::STD_PROP_LIST);
$arr->userid = $curruser[0];
$arr->email = $curruser[1];
$arr->fullname = $curruser[2];
$arr->displaypic = $curruser[3];
$arr->displayname = $curruser[4];
echo str_replace("\\", "", json_encode((object) $arr));
}
else {
echo "false";
}
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
}
?>
이 내 동료가 쓴 안드로이드 코드 :
@Override
protected Boolean doInBackground(Void... params) {
// TODO Auto-generated method stub
boolean status=false;
LoginMgr lmgr=new LoginMgr(getSherlockActivity().getBaseContext());
try {
HttpClient httpclient= new DefaultHttpClient();
HttpGet httpget=new HttpGet("http://www.xxxxx.com/login.php?device=mobi&[email protected]&password=xxxxxxx
");
HttpResponse response= httpclient.execute(httpget);
int statuscode=response.getStatusLine().getStatusCode();
if(statuscode==200){
InputStream is=response.getEntity().getContent();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
final StringBuilder stringbuild= new StringBuilder();
String curr_line;
if((curr_line=br.readLine())!=null){
stringbuild.append(curr_line);
String jsonstr=stringbuild.toString();
getSherlockActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(getSherlockActivity(), stringbuild.toString(), Toast.LENGTH_LONG).show();
}
});
if(!jsonstr.equalsIgnoreCase("false")){
JSONObject job=new JSONObject(jsonstr);
String str=job.getString("3").replace("\\/","/");
String image="http://www.xxxxx.com/img/timthumb.php?&h=50&w=50&src=
"+str;
lmgr.loginUser(new Login(job.getString("0"),job.getString("4"),job.getString("1"),image));
status=true;
JSONObject job=new JSONObject(jsonstr);
if(job.getString("success").equalsIgnoreCase("1")){
lmgr.loginUser(new Login(job.getString("userid"),job.getString("username"),job.getString("useremail"),job.getString("userimage")));
status=true;
}
}
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return status;
}
내가 대신 내 코드에서 에코의 복귀를 사용하여 시도했다가하지만 여전히 작동하지 않았다
이
은 PHP 코드입니다 . 빈 배열 만 오류가 없습니다.
왜 json_encode에서 백 슬래시를 제거 하시겠습니까? – colburton
반환 된 배열에 url이 있기 때문에 json_encode는 백 슬래시를 추가하여 특정 문자를 이스케이프 처리합니다. –
하지만 더 이상 유효하지 않습니다. 더 이상 디코딩 할 수 없습니다. – colburton