Domanda

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 ??

the result of the added code is

04-14 23:17:57.766: D/this from internet(2367): usersList.get(position).getDate() is null

LogCat Error

   04-14 21:59:22.170: E/AndroidRuntime(1951): FATAL EXCEPTION: main
04-14 21:59:22.170: E/AndroidRuntime(1951): java.lang.NullPointerException
04-14 21:59:22.170: E/AndroidRuntime(1951):     at com.devleb.loginDemo.CustomAdapter.getView(CustomAdapter.java:60)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.AbsListView.obtainView(AbsListView.java:2177)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.ListView.makeAndAddView(ListView.java:1840)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.ListView.fillDown(ListView.java:675)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.ListView.fillFromTop(ListView.java:736)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.ListView.layoutChildren(ListView.java:1655)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.AbsListView.onLayout(AbsListView.java:2012)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.View.layout(View.java:14289)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.View.layout(View.java:14289)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.View.layout(View.java:14289)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.View.layout(View.java:14289)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.View.layout(View.java:14289)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.Choreographer.doFrame(Choreographer.java:532)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.os.Handler.handleCallback(Handler.java:730)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.os.Looper.loop(Looper.java:137)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at android.app.ActivityThread.main(ActivityThread.java:5103)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at java.lang.reflect.Method.invokeNative(Native Method)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at java.lang.reflect.Method.invoke(Method.java:525)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-14 21:59:22.170: E/AndroidRuntime(1951):     at dalvik.system.NativeStart.main(Native Method)

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background_1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/uid"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="6dip"
        android:paddingTop="20dip"
        android:text="text view"
        android:textColor="#FFFFFF"
        android:textSize="17dip"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/txtCreateDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="TextView"
        android:textColor="#FFFFFF" />

</RelativeLayout>

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 = new ArrayList<User>();

    // 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());

        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;
    }

}
È stato utile?

Soluzione

You didn't setDate(), so getDate() is null.

                    // 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);

I don't see any use of HashMap is any of the code. But for testing, just leave this here.

Add map.setName(user); map.setDate(cdate);

That's it.

Altri suggerimenti

Put this

Log.d(TAG, txtCreateDate == null ? "txtCreateDate is null" : usersList.get(position) == null ? "usersList.get(position) is null" : usersList.get(position).getDate() == null ? "usersList.get(position).getDate() is null" : "nothing is null");

Before

 txtCreateDate.setText(usersList.get(position).getDate().toString());

Also, don't you need to initialize your usersList?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top