2017-09-16 60 views
0

我試圖用排槍庫通過Android的訪問JSON數據,併爲Web服務器的後端我用python.Here是後我的服務器端代碼:JSON解析與排球庫我沒有任何錯誤,但結果顯示不

def showAndroid(request): 
    users=User.objects.all() 
    data = serializers.serialize('json', users, fields=('nom', 'prenom', 'postnom','mail')) 
    return HttpResponse(data, content_type='application/json') 

當我進入我得到以下結果的網址:

enter image description here

參見我的Android代碼:

package com.example.lislis.mesexercices; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class UserJson extends AppCompatActivity { 
EditText nom,prenom,postnom,email; 
Button ajouter,voir; 
    TextView list; 
RequestQueue requestQueue; 
String insertUrl="http://192.168.1.14:8000/webservices/insert-users/"; 
    String showUrl="http://192.168.1.14:8000/webservices/afficher-users/"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.user_json); 
     nom=(EditText)findViewById(R.id.nom); 
     prenom=(EditText)findViewById(R.id.prenom); 
     postnom=(EditText)findViewById(R.id.postnom); 
     email=(EditText)findViewById(R.id.email); 
     ajouter=(Button) findViewById(R.id.ajouter_user); 
     voir=(Button)findViewById(R.id.afficher_users); 
     list=(TextView)findViewById(R.id.list_users); 

     requestQueue= Volley.newRequestQueue(this); 

     voir.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, showUrl, new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         try { 
          JSONArray users=response.getJSONArray("data"); 
          for(int i=0;i<users.length();i++) 
          { 
           JSONObject user=users.getJSONObject(i); 
           String fname=user.getString("prenom"); 
           String lname=user.getString("nom"); 
           String mname=user.getString("postnom"); 
           String mail=user.getString("mail"); 
           list.append(fname+" "+lname+" "+mname+" "+mail+"\n"); 
           System.out.println("Tototo\n"+fname+" "+lname+" "+mname+" "+mail+"\n"); 
          } 
          list.append("===\n="); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

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

但是當我點擊該按鈕顯示JSON數據,在我的Django的服務器監控器,我可以看到一個狀態代碼200成功的GET請求: enter image description here

但對於測試,如果一切順利的服務器,我試圖創建一個Ajax請求一個HTML文件,並複製另一臺計算機上的文件在我同一個無線局域網,我沒有任何problem.Is有任何問題,我的源代碼訪問JSON?

+0

你可以把抽射您onError方法調試點,並檢查被稱爲與否的方法。 –

+0

@javaYoda OnError方法有錯誤 – lislis

+0

請評論該錯誤。 –

回答

0

JSONArray users=response.getJSONArray("data"); 復發與 JSONArray users = response.getJSONArray(「fields」);

0

它看起來像你的迴應,你應該得到一個JSONArray從最初的JSONObject回沒有「數據」的訪問數組鍵值。所以,你可能會拋出一個JSONException,因爲你沒有正確解析它。

檢查了這一點,你可以看到,如果加入,你會拋出異常打印出堆棧跟蹤Log.d聲明。

如果你有機會到後臺代碼,你可以很容易地通過添加一個「數據」字段用於提取陣列解決這個問題,否則你就必須去了解不同的解析你的JSON。