【发布时间】:2016-03-22 10:11:01
【问题描述】:
您好,任何有 volley 库经验的人都可以帮我在以下代码中获取 JSON。我得到一个错误日志:
D/Volley:[13] BasicNetwork.logSlowRequests:请求的 HTTP 响应=http://digitaresolutions.com/apps/drugindex/getbrand.php?id=bactiflox0xdf379d06 NORMAL 1>[lifetime=19209],[size=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
}
}
【问题讨论】:
-
实际上能够获得一个标记为“产品”的意图值,它为我提供了我需要的唯一 json 数据。 url 和加载部分运行良好,但无法获取 json。是我的 JSON 格式需要修复还是有什么问题?