[英]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.