2015-01-31 2 views
3

저는 Android에 익숙하지 않지만, 매우 열심히 노력하고있는 웹 스 크레이퍼와 잘 어울리는 앱을 발견했습니다. 데이터베이스와. 이것은 PHP 스크립트를 사용하여 MySQL 데이터베이스에서 값을 검색하여 안드로이드 장치에 표시하는 기본 응용 프로그램입니다. 여기 JSONException : java.lang.String 유형의 값을 JSONObject로 변환 할 수 없습니다.

는 PHP입니다 :

<?php 
try { 
    $conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, *******); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $results=$conn->query('SELECT * FROM Recipes'); 

    while ($results = $row->fetch(PDO::FETCH_ASSOC)){ 
    $output[]=$row; 
    print(json_encode($output)); 
    } 

} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 
$conn = null; 
?> 

원래 코드에 사용 된 mysql_connect하지만 대신 PDO를 구현했습니다.

protected void onPostExecute(Void v) { 

     // ambil data dari Json database 
     try { 
      JSONArray Jarray = new JSONArray(result); 
      for(int i=0;i<Jarray.length();i++) 
      { 
      JSONObject Jasonobject = null; 
      //text_1 = (TextView)findViewById(R.id.txt1); 
      Jasonobject = Jarray.getJSONObject(i); 

      //get an output on the screen 
      //String id = Jasonobject.getString("id"); 
      String name = Jasonobject.getString("Title"); 
      String db_detail=""; 

      if(et.getText().toString().equalsIgnoreCase(name)) { 
      db_detail = Jasonobject.getString("ingredient"); 
      text.setText(db_detail); 
      break; 
      } 
      //text_1.append(id+"\t\t"+name+"\t\t"+password+"\t\t"+"\n"); 

      } 
      this.progressDialog.dismiss(); 

     } catch (Exception e) { 
      // TODO: handle exception 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
     } 
    } 

로그 캣은 말한다 : 여기

는 자바입니다

오류 분석 데이터 org.json.JSONException : java.lang.String 타입의 값 BR은 JSONArray

로 변환 할 수 없습니다

this stackoverflow question의 왼쪽 중괄호와 오른쪽 중괄호를 사용해 보았습니다.하지만 그럴 것 같지 않습니다.

+0

은 JSON을 보여이 사용하는 다음 코드를 수행 할 수 있습니다 응답. – Riser

+0

"제목"또는 "재료"는 json 객체 일 수 있으며 문자열로 가져옵니다. Jasonobject.getJSONObject ("Title") 또는 Jasonobject.getJSONObject ("ingredient")로 변경하십시오. – Jigar

+0

@Camil Staps PDC가 팁을 주셔서 감사드립니다. – Claphands

답변

1
<?php 
try { 
    $conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

$sql=mysql_query("select * from Recipes"); 
while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 

이 아무것도 doesn'tdo. 당신은 mysql_ *와 PDO가 섞여 있습니다. notpossible입니다. PDO와 연결하면 mysql_ * 쿼리를 사용하여 데이터베이스에 액세스 할 수 없습니다.

이로 인해 오류가 발생하여 페이지가 유효하지 않은 Json이되어 오류가 발생합니다.

대신, (보안상의 문제로 mysql_로의 *되지 않습니다)에만 PDO 사용 : 당신의 결과는 배열 목록입니다

<?php 
try { 
    $conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

$sql = $conn->query("select * from Recipes"); 
while (($row = $sql->fetch(PDO::FETCH_ASSOC)) !== false) 
    $output[]=$row; 
print(json_encode($output)); 
?> 
3

실행 후 JSONObject를 먼저 가져온 다음 배열을 가져옵니다. 여전히 동일한 메시지라면 서버가 올바른 json 객체를 반환하지 않습니다.

JSONObject jobj = new JSONObject(result); 
JSONArray Jarray = jobj.getJSONArray("output"); 
-1

경우, 당신은

ArrayList<String> list = new ArrayList<String>(); 
list.add("blah"); 
list.add("bleh"); 
JSONArray jsArray = new JSONArray(list); 
+0

질문에 연결하는 데 도움이 될 수있는 질문이 하나 있습니다. http://stackoverflow.com/questions/2818697/sending-and-parsing-json-in-android –

관련 문제