下面是錯誤日誌:如何解決Android應用程序的JSON錯誤?
03-13 10:00:15.778: W/System.err(2558): org.json.JSONException: No value for objects
03-13 10:00:15.778: W/System.err(2558): at org.json.JSONObject.get(JSONObject.java:354)
03-13 10:00:15.778: W/System.err(2558): at org.json.JSONObject.getJSONArray(JSONObject.java:544)
03-13 10:00:15.778: W/System.err(2558): at com.app.Main$ListTask.doInBackground(Main.java:104)
03-13 10:00:15.778: W/System.err(2558): at com.app.Main$ListTask.doInBackground(Main.java:1)
03-13 10:00:15.778: W/System.err(2558): at android.os.AsyncTask$2.call(AsyncTask.java:287)
03-13 10:00:15.778: W/System.err(2558): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-13 10:00:15.778: W/System.err(2558): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-13 10:00:15.778: W/System.err(2558): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
03-13 10:00:15.778: W/System.err(2558): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-13 10:00:15.778: W/System.err(2558): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-13 10:00:15.778: W/System.err(2558): at java.lang.Thread.run(Thread.java:856)
活動代碼
package com.app;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Main extends Activity {
ListView List;
ArrayList<String> listArray = new ArrayList<String>();
ArrayAdapter<String> Adapter;
Context context;
String url = "http://sandzak.today/api/1/categories/?format=json/api/projekti/10?=";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this;
List = (ListView) findViewById(R.id.lista);
Adapter = new ArrayAdapter<String>(this, R.layout.lista, listArray);
List.setAdapter(Adapter);
VideoListTask loaderTask = new VideoListTask();
loaderTask.execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class VideoListTask extends AsyncTask<Void, Void, Void>{
ProgressDialog dialog;
@Override
protected void onPreExecute()
{
dialog = new ProgressDialog(context);
dialog.setTitle("Loading Category");
dialog.show();
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params)
{
HttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(url);
try
{
HttpResponse responce = client.execute(getRequest);
StatusLine statusLine = responce.getStatusLine();
int statusCode = statusLine.getStatusCode();
if(statusCode != 200)
{
return null;
}
InputStream jsonStream = responce.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(jsonStream));
StringBuilder builder = new StringBuilder();
String line;
while((line = reader.readLine())!=null)
{
builder.append(line);
}
String jsonData = builder.toString();
JSONObject json = new JSONObject(jsonData);
JSONObject meta = json.getJSONObject("meta");
JSONArray objects = meta.getJSONArray("objects");
for(int i =0; i<objects.length(); i++)
{
JSONObject video = objects.getJSONObject(i);
listArray.add(video.getString("name"));
}
}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
dialog.dismiss();
Adapter.notifyDataSetChanged();
super.onPostExecute(result);
}
}
}
我怎樣才能解決這個問題?
顯示你的json響應。 – Piyush
例外說'meta'沒有叫'objects'的對象 – Blackbelt
關於保護的void doInBackground(void ... params)該函數存在json響應 – elvis