2011-10-25 7 views
0

어리석은 질문에 대해 미안하지만 자바 네트워크에 대한 지식은 끔찍합니다. 기본적으로 내 안드로이드 응용 프로그램에서 많은 PHP 스크립트를 호출하여 mysql db에서 데이터를 가져옵니다. 이 데이터는 json 형식으로 반환되며 Google json 라이브러리를 사용하여 구문 분석합니다. 모든 것이 잘 작동하지만 각 PHP 페이지에서 테스트를 추가해야한다는 것을 알고 있습니다. 테스트가 성공하면 스크립트는 계속 json 파일을 반환하지만 테스트가 실패하면 스크립트는 문자열 "false"또는 false 값 (최대 나까지)을 반환하고 데이터를 표시하는 대신 응용 프로그램이 사용자를 로그인 페이지로 리디렉션합니다.자바 : PHP 스크립트 출력의 내용을 확인하는 방법?

 URL url = new URL(Costanti.IP_SERVER+"myApps.php"+"?userId="+this.userId); 
     try 
     { 

      HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
      int status = conn.getResponseCode(); 
      if (status >= 200 && status <= 299) 
      { 
       Reader r = new InputStreamReader(conn.getInputStream()); 
       Applicazioni dati = new Applicazioni(); 
       try 
       { 

        dati = gsonReader.fromJson(r, Applicazioni.class); 

        return dati; 
       } 
       catch (Exception e) 
       { 
        System.out.println("Ho fallito a prendere i dati"); 
        Log.e("JSON_Parser",e.toString()); 

       } 
      } 
     } 
     catch (IOException e) 
     { 
      System.out.println("Ho fallito la connnection"); 
      e.printStackTrace(); 
     } 
    } 

그래서 기본적으로 내가 imputStreamReader 내부 JSON 파일을 읽고 내 데이터로 Applicazioni 객체를 채우기 위해이 구글 라이브러리를 사용 :

코드는 다음입니다.

imputStreamReader의 내용이 문자열 "false"또는 부울 false인지 어떻게 확인하고 json 라이브러리와 다른 구문을 사용합니까?

끝에서 내가하는 PHP do echo json_encode ($ applicazione); 한 경우 또는 에 가 다른 경우에 "거짓"에코 TNX

답변

2
InputStream in = new URL(url).openStream(); 
Scanner scanner = new Scanner(new InputStreamReader(in)); 
String result = scanner.useDelimiter("\\Z").next(); // this reads the whole 
                // script output in a string 
if(result.equals("false")) 
handle the false value... 
else 
    dati = gsonReader.fromJson(result, Applicazioni.class); 
+0

Tnx,하지만 내 독자와 스캐너도 사용할 수 있습니다 r = new InputStreamReader (conn.getInputStream()); 내 코드에 ?? openStream을 사용하여 openStream() 대신 HttpURLConnection 객체를 가져올 수 있습니다. 당신은 내게 차이 pls을 설명 할 수 있습니까 :) – Sgotenks

+0

그래, 당신은 conn.getInputStream() 안에 스캐너를 감싸고 아마도 같은 결과를 얻을 수 있다고 생각해. 해봐야 겠지만, 전에는 HttpURLConnection을 사용하지 않으므로 확신 할 수 없습니다. 테스트하는 것은 꽤 빠를 것입니다. – kgautron

1

할 수 있습니다 JSON 인코딩도 같은 잘못된 결과 [ "결과"=> "거짓"] PHP,이 방법에서 당신은 항상 JSON 디코딩 있음 수 Java 프로그램을 실행 한 다음 결과 값을 찾으십시오.

두 경우 모두 결과 값을 출력에 넣을 수 있습니다.

+0

문제는 출력이 제대로 포맷하는 구글 JSON 파서 경우, 예를 들어 테스트 내가 JSON 출력이 클래스 Applicazion을 본 만들 필요가 PHP에서 succesfull입니다 ..... 묻는 것입니다. 같은 필드 이름, 동일한 구조 ecc .... 그렇지 않으면 파싱에 실패합니다 ....... 그렇다면 json이 "false"를 인코딩하면 자바 측에서 파싱이 오류 예외가 발생합니다 ..... – Sgotenks

+0

Applicazion 클래스에 결과 필드를 추가 할 수 있습니다. 그런 다음 실패한 경우 결과를 제외하고 그 안에 아무것도 채우지 않습니다. Google의 GSON 라이브러리가 정상적으로 null을 처리합니다. 따라서 필드가 비어 있으면 출력 객체에서 null이됩니다. – guru

관련 문제