我创建了一个应用程序。在该应用中,存在广告模块。该模块分为两部分:
第一单元正常运作。创建广告并填写参数(例如name
,mobile
,state
)并添加add
的说明后,点击发送按钮可创建广告并存储数据库中的值。该值以JSON格式存储。
但是当我点击vies广告时,日志猫中会显示以下错误。请检查代码并告诉我哪里错了。
07-07 04:32:12.643: W/System.err(3306): org.json.JSONException: No value for all_advertisements
07-07 04:32:12.653: W/System.err(3306): at org.json.JSONObject.get(JSONObject.java:355)
07-07 04:32:12.653: W/System.err(3306): at org.json.JSONObject.getJSONArray(JSONObject.java:549)
07-07 04:32:12.653: W/System.err(3306): at com.sunmobileappnow.mobileappnow.ViewAdvertise$ViewAdvertisement.doInBackground(ViewAdvertise.java:99)
07-07 04:32:12.653: W/System.err(3306): at com.sunmobileappnow.mobileappnow.ViewAdvertise$ViewAdvertisement.doInBackground(ViewAdvertise.java:1)
07-07 04:32:12.653: W/System.err(3306): at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-07 04:32:12.653: W/System.err(3306): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-07 04:32:12.653: W/System.err(3306): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-07 04:32:12.653: W/System.err(3306): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-07 04:32:12.663: W/System.err(3306): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-07 04:32:12.663: W/System.err(3306): at java.lang.Thread.run(Thread.java:841)
This is my view advertisement `.java` file. In this file I have defined the four `TextView`s which displays the name, mobile, (for those we want to send the add) states (selection of the state for which add is broadcast),and description of the advertisement.
`View_add` is the method used in the web services.login_token and `status_keys` is the parameter.
public class ViewAdvertise extends Activity {
private SharedPreferences pref;
private String login_token;
private TextView tv1,tv2,tv3,tv4;
ListView list ;
ArrayList<String> nameArray = new ArrayList<String>();
ArrayList<String> mobileArray = new ArrayList<String>();
ArrayList<String> stateArray = new ArrayList<String>();
ArrayList<String> descArray = new ArrayList<String>();
ArrayAdapter<String> adapter ;
//ArrayList<HashMap<String, String>> adsArray = new ArrayList<HashMap<String,String>>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_ads);
pref=this.getSharedPreferences("Driver", MODE_WORLD_READABLE);
login_token = pref.getString("login_token","login_token");
list=(ListView) findViewById(R.id.list);
tv1=(TextView) findViewById(R.id.text2);
tv2=(TextView) findViewById(R.id.text4);
tv3=(TextView) findViewById(R.id.text5);
tv4=(TextView) findViewById(R.id.text6);
new ViewAdvertisement().execute();
}
private class ViewAdvertisement extends AsyncTask<String, String, String[]> {
String mname,mobile,state,desc;
@Override
protected String[] doInBackground(final String... params)
{
ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null
&& conMgr.getActiveNetworkInfo().isAvailable()
&& conMgr.getActiveNetworkInfo().isConnected())
{
HttpClient httpclient = new DefaultHttpClient();
JSONObject job1= new JSONObject();
try
{
job1.put("status_key","0");
job1.put("method", "view_add");
job1.put("login_token", login_token);
StringEntity se = new StringEntity(job1.toString());
//HttpPost httppost = new HttpPost("http://suntechwebsolutions.com/clients/mobileapp_now/webservice.php");
HttpPost httppost = new HttpPost("http://suntechwebsolutions.com/clients/DGCapp/webservice.php");
httppost.setEntity(se);
HttpResponse response1 = httpclient.execute(httppost);
String data1 = EntityUtils.toString(response1.getEntity());
System.out.println("response "+data1);
JSONObject jo = new JSONObject(data1);
Log.d("response", jo.toString(4));
JSONArray jArray = jo.getJSONArray("all_advertisements");
Log.d("Array", jArray.toString(4));
/* JSONObject adv= jo.getJSONObject("advertisement_count");
String advertisement_count = adv.getString("count(*)");
System.out.print("advertisemnet"+advertisement_count); */
for (int j=0; j < jArray.length(); j++)
{
try {
JSONObject jsob = jArray.getJSONObject(j);
mname = jsob.getString("name");
mobile = jsob.getString("mbl_nmbr");
state = jsob.getString("states");
desc = jsob.getString("desc");
nameArray.add(jsob.getString("name").toString());
mobileArray.add(jsob.getString("mbl_nmbr").toString());
stateArray.add(jsob.getString("states").toString());
descArray.add(jsob.getString("desc").toString());
HashMap<String, String> adHash = new HashMap<String, String>();
adHash.put("name", jsob.getString("name").toString());
adHash.put("mbl_nmbr", jsob.getString("mbl_nmbr").toString());
adHash.put("states", jsob.getString("states").toString());
adHash.put("desc", jsob.getString("desc").toString());
//adsArray.add(adHash);
// adapter = new ArrayAdapter<String>(ViewAdvertise.this, R.layout.listrow, stateArray);
}
catch (JSONException e)
{
e.printStackTrace();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
final AlertDialog.Builder alert = new AlertDialog.Builder(ViewAdvertise.this);
alert.setTitle("Alert !");
alert.setMessage("No Internet connection ");
alert.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton)
{
dialog.dismiss();
}
});
runOnUiThread(new Runnable()
{
public void run()
{
//pDialog.dismiss();
alert.show();
}
});
}
return params;
}
@SuppressLint("NewApi")
@Override
protected void onPostExecute(String[] result)
{
super.onPostExecute(result);
// adapter.clear();
/*adapter.notifyDataSetChanged(); */
// adapter.clear();
adapter = new ArrayAdapter<String>(ViewAdvertise.this, R.layout.listrow, stateArray);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
// adapter.addAll(stateArray);
/*tv1.setText(desc);
tv2.setText(mname);
tv3.setText(mobile);
tv4.setText(state);*/
System.out.print("Original contents of al: ");
Iterator<String> itr = nameArray.iterator();
while (itr.hasNext()) {
String element = itr.next();
System.out.print(element + " ");
}
System.out.println();
System.out.print("Original contents of al: ");
Iterator<String> itr1 = stateArray.iterator();
while (itr.hasNext()) {
String element = itr1.next();
System.out.print(element + " ");
}
System.out.println();
// ListView lv = getListView();
// listening to single list item on click
list.setOnItemClickListener(new OnItemClickListener() {
int position;
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// selected item
// String product = ((TextView) view).getText().toString();
long index = parent.getSelectedItemId();
this.position=position;
// Launching new Activity on selecting single List Item
Intent i = new Intent(getApplicationContext(), ViewAds.class);
// sending data to new activity
i.putStringArrayListExtra("nameArray", nameArray);
i.putStringArrayListExtra("mobileArray", mobileArray);
i.putStringArrayListExtra("stateArray", stateArray);
i.putStringArrayListExtra("descArray", descArray);
//i.putExtra("adArray", adsArray);
i.putExtra("position", position);
startActivity(i);
}
});
}
}
}
log cat Response
07-08 01:19:39.547: D/response(1434): {
07-08 01:19:39.547: D/response(1434): "data": [
07-08 01:19:39.547: D/response(1434): {
07-08 01:19:39.547: D/response(1434): "id": "53",
07-08 01:19:39.547: D/response(1434): "desc": "",
07-08 01:19:39.547: D/response(1434): "status": "2",
07-08 01:19:39.547: D/response(1434): "name": "vivek",
07-08 01:19:39.547: D/response(1434): "states": "",
07-08 01:19:39.547: D/response(1434): "mbl_nmbr": "",
07-08 01:19:39.547: D/response(1434): "user_id": "45",
07-08 01:19:39.547: D/response(1434): "date_time": "2014-07-07 05:16:29"
07-08 01:19:39.547: D/response(1434): }
07-08 01:19:39.547: D/response(1434): ],
07-08 01:19:39.547: D/response(1434): "err-code": "0"
07-08 01:19:39.547: D/response(1434): }
答案 0 :(得分:0)
试试这个..
改变这个..
JSONArray jArray = jo.getJSONArray("all_advertisements");
到
JSONArray jArray = jo.getJSONArray("data");
因为您的JSONArray
密钥是数据而不是 all_advertisements 所以更改它。