2016-07-24 116 views
0

我使用PHP将数据从服务器发送到我的Android应用程序。该代码运行在PHP中的任何错误,但我得到的错误在Android应用程序,我无法解析JSON。我引起了JSON和它托克到http://json.parser.online.fr/它表明我语法错误:在JSON意外标记位置0误差 这是我的PHP代码:无法解析JSON并获得JSON中的意外令牌

function selectAll($cnn) 
{ 
    $query="SELECT * FROM user"; 
    $stmt=$cnn->prepare($query); 
    $stmt->execute(); 

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 

    $result[]=$row; 

    } 
    return $result; 
    } 
echo(json_encode(array('result' => $arr))); 

and This is my json data that generated with php

当然,这是我的Android代码:

public class ManageUser extends AppCompatActivity implements RecyclerItemClickListener.OnItemClickListener { 
    RecyclerView recyclerView; 
    ProgressBar progressBar; 
    List<user> listOfUser=new ArrayList<>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_manage_user); 
     progressBar=(ProgressBar)findViewById(R.id.UserProgress); 
     recyclerView=(RecyclerView)findViewById(R.id.recviewUser); 
     recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this,this)); 
     SelectAllUserNetworkTask GetAllUser=new SelectAllUserNetworkTask(this); 
     GetAllUser.execute(); 
    } 

    @Override 
    public void onItemClick(View childView, int position) { 
     Toast.makeText(this,"Clicked trigger",Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onItemLongPress(View childView, int position) { 
     Toast.makeText(this,"LongPress",Toast.LENGTH_SHORT).show(); 
    } 

    public class SelectAllUserNetworkTask extends AsyncTask { 

     Context myContext; 
     List<user> productarray =new ArrayList<>(); 
     private OkHttpClient client=new OkHttpClient(); 
     public String Result; 
     public SelectAllUserNetworkTask(Context context) 
     { 
      this.myContext=context; 
     } 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressBar.setVisibility(View.VISIBLE); 
     } 

     @Override 
     protected Object doInBackground(Object[] params) { 
      try { 
       RequestBody requestBody; 
       requestBody = new MultipartBody.Builder() 
         .setType(MultipartBody.FORM) 
         .addFormDataPart("action","select") 

         .build(); 

       Request request = new Request.Builder() 
         .url(Tags.UserAddress) 
         .post(requestBody) 
         .build(); 

       Response response = client.newCall(request).execute(); 

       Result=response.body().string().toString(); 
       String str=Result.substring(Result.indexOf("{"), Result.lastIndexOf("}")); 
       JSONObject jsonObject=new JSONObject(str); 

       JSONArray jsonArray = jsonObject.getJSONArray("result"); 

       for (int i=0;i<jsonArray.length();i++) { 
        JSONObject jobject = jsonArray.getJSONObject(i); 
        user myUser =new user(); 

        myUser.setUsId(jobject.getInt("id")); 
        myUser.setName(jobject.getString("name")); 
        myUser.setLastName(jobject.getString("lastname")); 
        myUser.setEmail(jobject.getString("email")); 
        myUser.setPassword(jobject.getString("password")); 
        myUser.setImage(jobject.getString("image")); 
        myUser.setGender(jobject.getString("gender")); 
        myUser.setBirthDay(jobject.getString("birthday")); 
        myUser.setFavFilm(jobject.getString("favFilm")); 
        myUser.setFavColor(jobject.getString("favColor")); 
        myUser.setAboutMe(jobject.getString("aboutme")); 
        myUser.setAdmin(jobject.getInt("admin")); 
        productarray.add(myUser); 
       } 
       /* Type typeList=new TypeToken<List<ModelProduct>>(){}.getType(); 
       productarray=new Gson().fromJson(jsonObject.getString("result"),typeList);*/ 

       listOfUser = productarray; 
       return productarray; 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 


      return null; 
     } 

     @Override 
     protected void onPostExecute(Object o) { 
      super.onPostExecute(o); 
      progressBar.setVisibility(View.GONE); 
      recyclerView.setHasFixedSize(true); 
      LinearLayoutManager llm = new LinearLayoutManager(myContext); 
      llm.setOrientation(LinearLayoutManager.VERTICAL); 
      recyclerView.setLayoutManager(llm); 

      UserAdapter ca=new UserAdapter(listOfUser,myContext); 
      recyclerView.setAdapter(ca); 
     } 
    } 
} 
+0

PHP代码是不相关的,你的Android代码解析JSON对象是什么? – player87

回答

1

你应该改变这一行

echo(json_encode(array($arr))); 

echo(json_encode(array('result'=>$arr))); 

,因为你是在分析过程中获取的结果,这是不是有在PHP

+0

我改变了这一点,但我仍然在这条线的android上得到异常JSONObject jsonObject = new JSONObject(Result); – AndroidDev

0

的第一件事情,你JSONResponse处于JSONArray而不是JSONObject的形式。因此,将响应转换为JSONArray会导致解析错误。

其次,在JSON响应中,您看不到任何“结果”。

+0

我完全得到JSONObject的异常jsonObject = new JSONObject(Result);我应该做些什么来代替。因为你知道这是字符串,我们只是JSONObject要转换 – AndroidDev

+0

而且我也做这种方法来处理json数组格式,它在我之前为我工作 – AndroidDev

+0

JSONArray jsonArray = new JSONArray(response); “response”是您在调用该API方法后从服务器收到的字符串。 – SWAT

0

您可以使用此代码:

$result = mysqli_query($connection,"SELECT * FROM Students"); 
$output = array(); 
while($row = mysqli_fetch_array($result)){ 
$record = array(); 
$record['id'] = $row['Id']; 
$record['name'] = $row['Name']; 
$record['phone'] = $row['Phone']; 
$output[] = $record; 

} 回声json_encode($输出);

和Android的一面:

  String res ; 
      JSONObject jsonObject=new JSONObject(res); 
      JSONArray jsonArray = jsonObject.getJSONArray("result"); 
      for (int i=0;i<jsonArray.length();i++) { 
       JSONObject jobject = jsonArray.getJSONObject(i); 
       user myUser =new user(); 
       myUser.setUsId(jobject.getInt("id")); 
       myUser.setName(jobject.getString("name")); 
       myUser.setAdmin(jobject.getInt("phone")); 
       productarray.add(myUser); 
      } 

我希望这对你的工作;