有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用volley库进行javajson解析

您好,任何有volley库经验的人都可以帮助我在下面的代码中获取JSON。我正在错误日志中:

D/Volley: [13] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://digitaresolutions.com/apps/drugindex/getbrand.php?id=bactiflox 0xdf379d06 NORMAL 1> [lifetime=19209], [size=160], [rc=200], [retryCount=0]; I/Search_view: org.json.JSONException: Value of type java.lang.String cannot be converted to 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
}

}


共 (3) 个答案

  1. # 1 楼答案

    删除此行

    JSONObject value = json.getJSONObject(null);
    

    更改此行

    JSONArray items = value.getJSONArray("result")
    

    JSONArray items = json.getJSONArray("result");
    
  2. # 2 楼答案

    将JsonObjectRequest替换为StringRequest
    i、 e

    @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();
            }
        }  
    

    试试这个。成功了

  3. # 3 楼答案

    看看这是否有帮助

    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...");
    
        }
    
    }