2016-09-19 86 views
1

我试图从服务器上的数据库中读取一些数据,但我有此错误:Android的凌空错误字符串不能转换为JSONObject的

09-19 21:14:55.294 8376-8376/com.example.user.firebasenot I/System.out: Try2com.android.volley.ParseError: org.json.JSONException: Value connected of type java.lang.String cannot be converted to JSONObject 

我想尝试,如果服务器上的代码工作使用先进的REST客户端和邮差也和它的工作非常好,这是结果:

{ 
    "students": [ 
    { 
     "id": "1", 
     "firstname": "saleh", 
     "lastname": "refai", 
     "age": "333" 
    }, 
    { 
     "id": "2", 
     "firstname": "ali", 
     "lastname": "hariri", 
     "age": "22" 
    } 
    ] 
} 

,但是当我试图在Android应用程式我以前的错误响应 这里是我的代码:

public class Insertion extends AppCompatActivity { 

    String token1; 
    EditText firstname,lastname,age; 
    Button register,show; 
    TextView result; 
    RequestQueue requestQueue; 
    String inserturl="http://saleh923.freeoda.com/insertstudent.php"; 
    String showurl="http://saleh923.freeoda.com/showstudent.php"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.nsertion); 
     Bundle b=getIntent().getExtras(); 
//  token1=b.getString("token"); 

     firstname=(EditText)findViewById(R.id.editText); 
     lastname=(EditText)findViewById(R.id.editText2); 
     age=(EditText)findViewById(R.id.editText3); 
     register=(Button) findViewById(R.id.button2); 
     show=(Button) findViewById(R.id.button3); 
     result=(TextView) findViewById(R.id.textView2); 

     requestQueue= Volley.newRequestQueue(getApplicationContext()); 
     show.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST, showurl, new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         try { 
          System.out.println("Try1"+response); 
          JSONArray students=response.getJSONArray("students"); 
          for(int i=0;i<students.length();i++) 
          { 
           JSONObject student=students.getJSONObject(i); 
           String firstname=student.getString("firstname"); 
           String lastname=student.getString("lastname"); 
           String age=student.getString("age"); 
           result.append(firstname+" "+lastname+" "+ age+ " \n"); 

          } 
          result.append("====\n"); 
         } catch (JSONException e) { 
          System.out.println("errrrror"); 
          e.printStackTrace(); 
         } 
        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         System.out.println("Try2"+error.toString()); 

        } 
       } 
       ); 
       requestQueue.add(jsonObjectRequest); 
      } 
     }); 
    } 
} 

这里是我的PHP代码:

<?php 
if($_SERVER["REQUEST_METHOD"]=="POST" ) 
{ 
     include "init.php"; 
     showStudent(); 
} 

function showStudent() 
{ 
    global $con; 
    $query="SELECT * FROM student; "; 
    $result=mysqli_query($con,$query); 
    $num_of_rows=mysqli_num_rows($result); 
    $temp_arr=array(); 
    if($num_of_rows>0) 
    { 
     while($row=mysqli_fetch_assoc($result)) 
     { 
      $temp_arr[]=$row; 


     } 
    } 

    header('Content-Type:application/json'); 
    echo json_encode(array("students"=>$temp_arr)); 
    mysqli_close($con); 
} 
?> 
+0

'showurl'不返回数据 –

+0

我试了一下邮差和高级REST客户端和返回的学生排列如图@fahad –

回答

2

从服务器返回的响应不是有效的JSON已经开始连字

这是从服务器

JSON响应
connected{"students":[{"id":"1","firstname":"saleh","lastname":"refai","age":"333"},{"id":"2","firstname":"ali","lastname":"hariri","age":"22"}]} 

断开连接,然后再试一次

0
@Override 
     public void onResponse(String response) { 
      try { 
       JSONObject jsonObject = new JSONObject(response); 
       JSONArray jsonArray = jsonObject.getJSONArray("students"); 
       for (int x = 0; x < jsonArray.length(); x++) { 
        JSONObject JO = jsonArray.getJSONObject(x); 
        String firstname = JO.getString("firstname"); 
       } 

      } cSONException e) { 
       e.printStackTrace(); 
      } 
+0

这是行不通的,因为Response.Listener 需要的JSONObject作为onResponse方法参数 –

+0

是的连接的字,我的错。 AmirhosseinAbd93答案将解决这个问题。 – j22purikas

0

在你的JSON对象的名称是 “stude”,但在你的代码中使用的 “学生”

代码:

JSONArray students=response.getJSONArray("students"); 

必须更改为:

JSONArray students=response.getJSONArray("stude"); 
+0

没有,这是我的错,我试图改变在PHP代码名称stude并尝试了先进的REST客户端,以确保它是否改变了JSON响应的头。这不是问题的解决方案 –

相关问题