2017-05-25 13 views
0

データベースからデータを取得しようとしています。私はデータベースからデータを取得しようとしているときにJSONExceptionが発生しました

public class RegisterRequest 
{ 
    private static RegisterRequest mInstance; 
    private RequestQueue requestQueue; 
    private static Context mCtx; 
    //default constructor 
    private RegisterRequest(Context context) 
    { 
     mCtx=context; 
     requestQueue=getRequestQueue(); 
    } 

    public RequestQueue getRequestQueue() 
    { 
     if(requestQueue==null) 
     { 
      requestQueue = Volley.newRequestQueue(mCtx); 
     } 
     return requestQueue; 
    } 

    public static synchronized RegisterRequest getmInstance(Context context) 
    { 
     if(mInstance==null) 
     { 
      mInstance = new RegisterRequest(context); 
     } 
     return mInstance; 
    } 

    public void addToRequestque(Request request) 
    { 
     requestQueue.add(request); 
    } 

} 

final JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) 
      { 
       try 
       { 
        Nome.setText(response.getString("Nome")); 
        Descrizione.setText(response.getString("Descrizione")); 
        Numinventario.setText(response.getString("NumInventario")); 
        Foto.setText(response.getString("Foto")); 
        Dtcatalogazione.setText(response.getString("DtCatalogazione")); 
       } 
       catch (JSONException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       int j = 21; 
      } 
     }) 
     { 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<>(1); 
       params.put("qrcode", richiesta); 

       return params; 
      } 
     }; 

     RegisterRequest.getmInstance(this).addToRequestque(request); 

これは私のRegisterRequestクラスです。これは私がそのファイルへのリクエストを送信したコードである

<?php 

    require "init.php"; 

    $qrcode = $_POST["qrcode"]; 

    $sql = "select * from cespite where QrCode = $qrcode;"; 

    $result = mysqli_query($con, $sql); 

    if(mysqli_num_rows($result)==0) 
    { 
     $code = "reg_failed"; 
     $message = "Nessun risultato trovato!"; 

     $err = array("code"=>$code, "message"=>$message); 
     echo json_encode($err); 
    } 
    else 
    { 
     $row = $result->fetch_all(MYSQLI_ASSOC)[0]; 
     echo json_encode($row); 
    } 

    //$mysqli_close($con); 

?> 

:私はこのPHPファイルへのリクエストを送ります私のデバッガで試してみました。私はいつもの方法で終了します。私はPHPファイルをWebからリクエストして送信しようとしたため、正しく動作しないため、なぜか分かりません。要求。 エラーはValue <br of type java.lang.String cannot be converted to JSONObjectです。

ありがとうございます!

EDIT:

+0

を発行しているなら、私に知らせてjsonObject

JSONArray jsonArray = response.getJSONArray("alldata"); JSONObject jsonObj = jsonArray.getJSONObject(0); if (jsonObj.getString("Nome") != null) { Nome.setText(jsonObj.getString("Nome")); Descrizione.setText(jsonObj.getString("Descrizione")); Numinventario.setText(jsonObj.getString("NumInventario")); Foto.setText(jsonObj.getString("Foto")); Dtcatalogazione.setText(jsonObj.getString("DtCatalogazione")); } 

を解析するためのJavaコードであります。 –

+0

@VladMatvienko nope、正しいです-_- ' – Interseba5

+0

Postman –

答えて

0

代わりjsonobject要求の文字列要求を行って解決し、エラーが出力は次のようなものであることを原因となった、あなたのPHPスクリプトで発生しました:

ERROR AT LINE X: INFORMATION ABOUT THE ERROR 

{"code": "code", "message": "Something went wrong"} 

これはに、全体的な出力を引き起こし無効なJSON(最初のERROR行はJSONではないため)。これにより、受信しているJSON例外が発生します。たとえば、JSONRequestではなく標準のtext-requestにPHPスクリプトが接続しているかどうかを確認してください。これにより、発生したPHPエラーが表示されます。サーバーのログを調べて、そこに何か役に立つものがあるかどうかを調べることもできます。

あなたのPHPスクリプトは、SQLインジェクション攻撃に対して脆弱です。 $_POST['qrcode']の値を引用符(たとえば ':')に置き換えるとどうなるか見てみましょう。悪意のある意図を持っている人は、この方法でデータベース全体を手に入れることができます。これは修正済みの文を使用して修正できます。

+0

私はすでに簡単なテキストリクエストでPHPを試してみました。なぜ私はJsonのリクエストでうまく動作しないのか分かりません。 – Interseba5

+0

PHPの出力を見てください:imgur.com/L2O1qVj – Interseba5

+0

@ Interseba5あなたの問題を見ると、あなたのjsonには "alldata"が含まれています。 ...}]しかしあなたのJavaではあなたはそれが{"Nome":....}を含んでいると仮定しています – thepieterdc

0

は、ここでは、適切なjsonObject

if(mysqli_num_rows($result)==0) 
{ 

$array = array(); 

$array[] = "reg_failed"; 
$array[] = "reg_failed";"Nessun risultato trovato!"; 

$get = array("error" => $array); 

header('Content-type: application/json'); 
echo json_encode($get); 
}else{ 

$array = array(); 
while($row = mysqli_fetch_assoc($result)) 
{ 
$array[] = $row; 
} 
$get = array("alldata" => $array); 

header('Content-type: application/json'); 
echo json_encode($get); 

} 

をしようとあなたはまだ私はあなたがrequestion間違ったURLであることを考える

+0

誰も同じ問題はありません。 PHPの出力を見てください: http:// imgur。com/L2O1qVj Androidスタジオでエラーが発生しました: http://imgur.com/D0PuHy4 – Interseba5

+0

あなたは間違った方法でjsonObjectを解析しています。私にあなたがアンドロイドStudioで –

+0

を使用している解析コードを表示するここで要求クラスがあります: http://imgur.com/cFhBtx2 ShowData(私がリクエストを送信)アクティビティ: http://imgur.com/4ma9OP7 http://imgur.com/L0qtSqO – Interseba5

関連する問題