php - the eclipse display an error in the InBackground method i do not know how to fix it
767
i have android application that need connection between android and mysql database using php the application work perfect. only the display user action do not work this method display the user in a list with some data.
can anyone help me to fix this error ??
LogCat Error
04-14 21:37:37.378: E/AndroidRuntime(1854): Caused by: java.lang.NullPointerException
04-14 21:37:37.378: E/AndroidRuntime(1854): at com.devleb.loginDemo.UserListActivity$getUserList.doInBackground(UserListActivity.java:143)
04-14 21:37:37.378: E/AndroidRuntime(1854): at com.devleb.loginDemo.UserListActivity$getUserList.doInBackground(UserListActivity.java:1)
04-14 21:37:37.378: E/AndroidRuntime(1854): at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-14 21:37:37.378: E/AndroidRuntime(1854): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-14 21:37:37.378: E/AndroidRuntime(1854): ... 4 more
User.java
package com.devleb.loginDemo;
import java.util.HashMap;
//@SuppressWarnings("serial")
public class User extends HashMap<String, String> {
/**
*
*/
String name;
String date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
CustomAdapter.java
package com.devleb.loginDemo;
import java.util.ArrayList;
import java.util.Date;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class CustomAdapter extends BaseAdapter {
private static ArrayList<User> usersList;
// private static ArrayList name, date;
LayoutInflater layoutInflater;
String[] userName;
Date[] createdDate;
Context context;
@SuppressWarnings("rawtypes")
public CustomAdapter(ArrayList<User> result, Context c) {
usersList = result;
context = c;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return usersList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return usersList.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int position, View arg1, ViewGroup parent) {
// TODO Auto-generated method stub
layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = null;
row = layoutInflater.inflate(R.layout.list_item, parent, false);
TextView txtCreateDate = (TextView) row
.findViewById(R.id.txtCreateDate);
txtCreateDate.setText(usersList.get(position).getDate().toString());
TextView txtName = (TextView) row.findViewById(R.id.name);
txtName.setText(usersList.get(position).getName());
return row;
}
}
UserListActivity.java
package com.devleb.loginDemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.http.NameValuePair;
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.ListActivity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class UserListActivity extends ListActivity {
JSONParser jsonParser = new JSONParser();
// ArrayList<HashMap<String, String>> usersList;
// **** added from internt*************///
@SuppressWarnings("rawtypes")
ArrayList<User> arrayList_userList;
ListView lvUsers;
// **** added from internt*************///
private static String url_display_user = "http://10.0.3.2/android_connect/display_user.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
private static final String TAG_ID = "id";
private static final String TAG_USERS = "userlist";
private static final String TAG_USER = "user";
private static final String TAG_DATE = "date";
// private static final String TAG_NAME = "name";
// employees JSONArray
JSONArray users = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_list);
// usersList = new ArrayList<HashMap<String, String>>();
new getUserList().execute();
// getListView
lvUsers = (ListView) findViewById(android.R.id.list);
lvUsers.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2,
long arg3) {
// String id = ((TextView)
// view.findViewById(R.id.uid)).getText()
// .toString();
// Intent in = new Intent(getBaseContext(), StatusList.class);
// in.putExtra(TAG_ID, uid);
// startActivity(in);
}
});
}
class getUserList extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
UserListActivity.this.setProgressBarIndeterminateVisibility(true);
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
// Building Parameters
List<NameValuePair> parametres = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jsonParser.makeHttpRequest(url_display_user,
"GET", parametres);
// Check your log cat for JSON reponse
Log.d("All Users: ", json.toString());
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// products found
// Getting Array of Products
users = json.getJSONArray(TAG_USERS);
// looping through All Users
for (int i = 0; i < users.length(); i++) {
JSONObject c = users.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_ID);
String user = c.getString(TAG_USER);
String cdate = c.getString(TAG_DATE).toString();
// creating new HashMap
User map = new User();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_USER, user);
map.put(TAG_DATE, cdate);
// adding HashList to ArrayList
// usersList.add(map);
arrayList_userList.add(map);
}
// ***********************************//
// From the internet
// arrayList_userList = new
// ArrayList<User>(usersList.value())
// **********************************//
return json.getString(TAG_MESSAGE);
} else {
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String result) {
// dismiss the dialog after getting all products
if (result != null) {
UserListActivity.this
.setProgressBarIndeterminateVisibility(false);
/**
* Updating parsed JSON data into ListView
* */
/*
* ListAdapter adapter = new
* SimpleAdapter(UserListActivity.this, usersList,
* R.layout.list_item, new String[] { TAG_ID, TAG_USER }, new
* int[] { R.id.uid, R.id.name }); // updating listview
* setListAdapter(adapter);
*/
lvUsers.setAdapter(new CustomAdapter(arrayList_userList,
getBaseContext()));
Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG)
.show();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.user_list, menu);
return true;
}
}
Answer
Solution:
It tells you exactly where your error is. You are getting a null pointer exception.
From your log cat:
In UserListActivity line 143, it seems like you are adding to a null ArrayList. From a quick look over the class, it seems like you are never initializing the
arrayList_userList