繁体   English   中英

使用Volley库进行JSON解析

[英]JSON Parsing using volley library

您好,任何有凌空库经验的人都可以通过以下代码帮助我获取JSON。 是一个错误日志:

D / Volley:[13] BasicNetwork.logSlowRequests:请求的HTTP响应= <[] http://digitaresolutions.com/apps/drugindex/getbrand.php?id=bactiflox 0xdf379d06 NORMAL 1> [lifetime = 19209],[大小= 160],[rc = 200],[retryCount = 0]; I / Search_view:org.json.JSONException:类型java.lang.String的值无法转换为JSONObject

public class Search_view extends AppCompatActivity {
String brandURL = "http://digitaresolutions.com/apps/drugindex/getbrand.php?id=";

private String TAG = this.getClass().getSimpleName();
private ListView lstView;
private RequestQueue mRequestQueue;
private ArrayList<BrandModel> arrBrand ;
private LayoutInflater lf;
private VolleyAdapter va;
private ProgressDialog pd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.brand_main);
    lf = LayoutInflater.from(this);


    arrBrand = new ArrayList<BrandModel>();
    va = new VolleyAdapter();

    lstView = (ListView) findViewById(R.id.listView);
    lstView.setAdapter(va);
    mRequestQueue =  Volley.newRequestQueue(this);

    // getting attached intent data
    Intent i = getIntent();
    String product = i.getStringExtra("product");

    // displaying selected product name
    String url = brandURL + product;

    // JSON Data
    pd = ProgressDialog.show(this,"Loading...","Please Wait...");
    try{
        Thread.sleep(2000);
    }catch(Exception e){

    }
    JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.i(TAG,response.toString());
            parseJSON(response);
            va.notifyDataSetChanged();
            pd.dismiss();
            ;            }
    },new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.i(TAG,error.getMessage());
        }
    });
    mRequestQueue.add(jr);



}

private void parseJSON(JSONObject json){
    try{
        JSONObject value = json.getJSONObject(null);
        JSONArray items = value.getJSONArray("result");
        for(int x=0;x<items.length();x++){

            JSONObject item = items.getJSONObject(x);
            BrandModel nm = new BrandModel();
            nm.setDrugbrand(item.optString("drugbrand"));
            nm.setManu(item.optString("manu"));
            nm.setDetails(item.optString("details"));
            arrBrand.add(nm);
        }
    }
    catch(Exception e){
        e.printStackTrace();
    }


}


public class BrandModel
{
    private String details;

    private String manu;

    private String drugbrand;

    public String getDetails ()
    {
        return details;
    }

    public void setDetails (String details)
    {
        this.details = details;
    }

    public String getManu ()
    {
        return manu;
    }

    public void setManu (String manu)
    {
        this.manu = manu;
    }

    public String getDrugbrand ()
    {
        return drugbrand;
    }

    public void setDrugbrand (String drugbrand)
    {
        this.drugbrand = drugbrand;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [details = "+details+", manu = "+manu+", drugbrand = "+drugbrand+"]";
    }
}


class VolleyAdapter extends BaseAdapter{

    @Override
    public int getCount() {
        return arrBrand.size();
    }

    @Override
    public Object getItem(int x) {
        return arrBrand.get(x);
    }

    @Override
    public long getItemId(int x) {
        return 0;
    }

    @Override
    public View getView(int x, View view, ViewGroup viewGroup) {
        ViewHolder vh ;
        if(view == null){
            vh = new ViewHolder();
            view = lf.inflate(R.layout.brand_row_listview,null);
            vh.tvTitle = (TextView) view.findViewById(R.id.txtTitle);
            vh.tvManu = (TextView) view.findViewById(R.id.txtManufacturer);
            vh.tvDetails = (TextView) view.findViewById(R.id.txtDetails);
            view.setTag(vh);
        }
        else{
            vh = (ViewHolder) view.getTag();
        }

        BrandModel nm = arrBrand.get(x);
        vh.tvTitle.setText(nm.getDrugbrand());
        vh.tvManu.setText(nm.getManu());
        vh.tvDetails.setText(nm.getDetails());
        return view;
    }

    class  ViewHolder{
        TextView tvTitle;
        TextView tvManu;
        TextView tvDetails;

    }
    // End JSON Loading code block
}

}

将JsonObjectRequest替换为StringRequest。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.brand_main);
    lf = LayoutInflater.from(this);


    arrBrand = new ArrayList<BrandModel>();
    va = new VolleyAdapter();

    lstView = (ListView) findViewById(R.id.listView);
    lstView.setAdapter(va);
    mRequestQueue =  Volley.newRequestQueue(this);

    // getting attached intent data
    Intent i = getIntent();
    String product = i.getStringExtra("product");

    // displaying selected product name
    String url = brandURL + product;

    // JSON Data
    pd = ProgressDialog.show(this,"Loading...","Please Wait...");
    try{
        Thread.sleep(2000);
    }catch(Exception e){

    }
    StringRequest req=new StringRequest(url, new Listener<String>() {

            @Override
            public void onResponse(String response) {
                // TODO Auto-generated method stub

                try {
                parseJSON(new JSONObject(response));  
                va.notifyDataSetChanged();
                pd.dismiss();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            }
        }, new ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError arg0) {
                // TODO Auto-generated method stub
                pd.dismiss();
            }
        });

        mRequestQueue.add(req);
} 

用下面的代码替换parseJSON函数。

private void parseJSON(JSONObject json){
        try{

            if(!json.isNull("result")) {

                JSONArray items = json.getJSONArray("result");
                for (int x = 0; x < items.length(); x++) {

                    JSONObject item = items.getJSONObject(x);
                    BrandModel nm = new BrandModel();
                    nm.setDrugbrand(item.optString("drugbrand"));
                    nm.setManu(item.optString("manu"));
                    nm.setDetails(item.optString("details"));
                    arrBrand.add(nm);
                }
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }  

尝试这个。 它的工作。

看看是否有帮助

public class SomeActivity extends AppCompatActivity {

    ProgressDialog pd;
    TextView txtView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_volley);

        txtView = (TextView) findViewById(R.id.txt_volley);

        String id = "bactiflox";
        String url = new Uri.Builder()
                .encodedPath("http://digitaresolutions.com")
                .appendEncodedPath("apps/drugindex/getbrand.php")
                .appendQueryParameter("id", id)
                .build().toString();

        JsonObjectRequest req = new JsonObjectRequest(url, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                pd.dismiss();
                txtView.setText(response.toString());

                try {
                    JSONArray mydata = response.getJSONArray("mydata");
                    for (int i = 0; i < mydata.length(); i++) {
                        JSONObject obj = mydata.getJSONObject(i);

                        Log.i("JSON", obj.getString("manu"));
                        Log.i("JSON", obj.getString("details"));
                        Log.i("JSON", obj.getString("drugbrand"));
                    }
                } catch (JSONException e) {
                    txtView.setText(e.toString());
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                pd.dismiss();
                txtView.setText(String.valueOf(error));
            }
        });

        addToRequestQueue(req); // TODO: Implement
        pd = ProgressDialog.show(this,"Loading...","Please Wait...");

    }

}

删除此行

JSONObject value = json.getJSONObject(null);

更改此行...

JSONArray items = value.getJSONArray("result")

JSONArray items = json.getJSONArray("result");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM