我正在尝试从JSON获取一些ID。 php代码正常工作,我从SQL数据库获取信息,但是当我尝试解析JSON数组或JSON对象时,我捕获了以下错误:
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)”
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'int org.json.JSONObject.getInt(java.lang.String)'
由字符串引起的错误:
成功诠释= jsonObject.getInt(KEY_SUCCESS);
和
电影= jsonObject.getJSONArray(KEY_DATA);
public class MovieListingActivity extends AppCompatActivity {
private static final String KEY_SUCCESS = "success";
private static final String KEY_DATA = "data";
private static final String KEY_MOVIE_ID = "intDocID";
private static final String BASE_URL = "http://127.0.0.1/ld/";
private ArrayList<HashMap<String, String>> movieList;
private ListView movieListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_listing);
movieListView = (ListView) findViewById(R.id.movieList);
new FetchMoviesAsyncTask().execute();
}
private class FetchMoviesAsyncTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
@Override
protected String doInBackground(String... params) {
HttpJsonParser httpJsonParser = new HttpJsonParser();
JSONObject jsonObject = httpJsonParser.makeHttpRequest(
BASE_URL + "fetchOrder.php", "GET", null);
try {
int success = jsonObject.getInt(KEY_SUCCESS);
JSONArray movies;
if (success == 1) {
movieList = new ArrayList<>();
movies = jsonObject.getJSONArray(KEY_DATA);
//Iterate through the response and populate movies list
for (int i = 0; i < movies.length(); i++) {
JSONObject movie = movies.getJSONObject(i);
Integer movieId = movie.getInt(KEY_MOVIE_ID);
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_MOVIE_ID, movieId.toString());
movieList.add(map);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String result) {
runOnUiThread(new Runnable() {
public void run() {
populateMovieList();
}
});
}
}
/**
* Updating parsed JSON data into ListView
* */
private void populateMovieList() {
ListAdapter adapter = new SimpleAdapter(
MovieListingActivity.this, movieList,
R.layout.list_item, new String[]{KEY_MOVIE_ID},
new int[]{R.id.movieId,});
// updating listview
movieListView.setAdapter(adapter);
//Call MovieUpdateDeleteActivity when a movie is clicked
movieListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//Check for network connectivity
if (CheckNetworkStatus.isNetworkAvailable(getApplicationContext())) {
String movieId = ((TextView) view.findViewById(R.id.movieId))
.getText().toString();
//Intent intent = new Intent(getApplicationContext(),
// MovieUpdateDeleteActivity.class);
//intent.putExtra(KEY_MOVIE_ID, movieId);
//startActivityForResult(intent, 20);
} else {
Toast.makeText(MovieListingActivity.this,
"Unable to connect to internet",
Toast.LENGTH_LONG).show();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 20) {
// If the result code is 20 that means that
// the user has deleted/updated the movie.
// So refresh the movie listing
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
}
这是HttpJsonParser类:
public class HttpJsonParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
HttpURLConnection urlConnection = null;
static JSONArray jarr = null;
// function get json from url
// by making HTTP POST or GET method
public JSONObject makeHttpRequest(String url, String method,
Map<String, String> params) {
try {
Uri.Builder builder = new Uri.Builder();
URL urlObj;
String encodedParams = "";
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.appendQueryParameter(entry.getKey(), entry.getValue());
}
}
if (builder.build().getEncodedQuery() != null) {
encodedParams = builder.build().getEncodedQuery();
}
if ("GET".equals(method)) {
url = url + "?" + encodedParams;
urlObj = new URL(url);
urlConnection = (HttpURLConnection) urlObj.openConnection();
urlConnection.setRequestMethod(method);
} else {
urlObj = new URL(url);
urlConnection = (HttpURLConnection) urlObj.openConnection();
urlConnection.setRequestMethod(method);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Content-Length", String.valueOf(encodedParams.getBytes().length));
urlConnection.getOutputStream().write(encodedParams.getBytes());
}
urlConnection.connect();
is = urlConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
/*
json.substring(1);
json.substring(0,json.length());
*/
jarr = new JSONArray(json);
jObj = jarr.getJSONObject(1);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
} catch (Exception e) {
Log.e("Exception", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
这是fetchOrder.php:
{"success":1,"data":[{"intDocID":2}]}