java.lang.RuntimeException:无法启动活动ComponentInfo:java.lang.NullPointerException:println需要一条消息

时间:2014-12-23 06:50:50

标签: android

我是Android新手。我收到上述错误,我不知道是什么导致了这一点。请帮我调试错误。欢迎所有建议。提前谢谢。

我的主要活动方法(我已将其命名为DetailsUsers.Java)

      package form.app.applicationform1;

        import form.app.applicationform1.DatabaseHandler;
        import form.app.applicationform1.R;
        import form.app.applicationform1.User;



        import android.app.Activity;
        import android.content.Intent;
        import android.os.Bundle;
        import android.util.Log;
        import android.view.View;
        import android.view.View.OnClickListener;
        import android.widget.Button;
        import android.widget.TextView;
        import android.widget.Toast;

        public class DetailsUsers  extends Activity implements OnClickListener{
            private static String position = null;



            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                Intent intent = getIntent();

                position = intent.getStringExtra("position");
                Log.d("value of position from intent", position);
                DatabaseHandler db = new DatabaseHandler(this);
                User user = db.getUser(position);
                TextView textViewDetailName = (TextView) findViewById(R.id.textView1);
                textViewDetailName.setText(user.getName());

                TextView textViewDetailAddress = (TextView) findViewById(R.id.textView4);
                textViewDetailAddress.setText(user.getAddress());

                TextView textViewDetailsPhone = (TextView) findViewById(R.id.textView2);
                textViewDetailsPhone.setText(user.getPhone());

                TextView textViewDetailsEmail = (TextView) findViewById(R.id.textView3);
                textViewDetailsEmail.setText(user.getEmail());

                TextView textViewDetailsComments = (TextView) findViewById(R.id.textView5);
                textViewDetailsComments.setText(user.getComments());

                Button backButton = (Button)findViewById(R.id.button2);
                backButton.setOnClickListener(this);

                Button editButton = (Button)findViewById(R.id.button1);
                editButton.setOnClickListener(this);

                Button saveButton = (Button)findViewById(R.id.button3);
                saveButton.setOnClickListener(this);
            }

            @Override
            public void onClick(View v) {
                if(v.getId() == R.id.button2) {
                    Intent intent = new Intent(getApplicationContext(), ListUsers.class);
                    startActivity(intent);
                }
                else if(v.getId() == R.id.button1) {
                    Intent intent = new Intent(getApplicationContext(), EditUsers.class);
                    intent.putExtra("position", position);
                    startActivity(intent);
                }
                else if (v.getId() == R.id.button3){
                    Intent intent = new Intent(getApplicationContext(), DetailsUsers.class);
                    Toast.makeText(this.getApplicationContext(), "User Has Been Saved", Toast.LENGTH_LONG ).show();
                    intent.putExtra("position", position);
                    startActivity(intent);
                }
            }
        }

Main.xml文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="form.app.applicationform1.DetailsUsers" >

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/back" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="50dp"
            android:contentDescription="@string/form_icon"
            android:paddingLeft="100dp"
            android:src="@drawable/ic_launcher"
            android:tag="Edit Form" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="70dp"
            android:text="@string/full_name"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/phone_no"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/email_id"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="50dp"
            android:text="@string/postal_address"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/comments_feedback"
            android:textSize="16sp" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/edit_form" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/save_form" />

    </LinearLayout>

清单文件:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="form.app.applicationform1"
        android:versionCode="1"
        android:versionName="1.0" >

        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="21" />
        <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name="form.app.applicationform1.DetailsUsers"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".EditUsers"
                android:label="@string/title_activity_edit_users" >
            </activity>
            <activity
                android:name=".ListUsers"
                android:label="@string/title_activity_list_users" >
            </activity>

             <activity android:name="form.app.applicationform1.DatabaseHandler"></activity>
            <activity android:name="form.app.applicationform1.User"></activity>
        </application>

    </manifest>

Logcat错误跟踪:

        12-23 01:29:29.179: D/AndroidRuntime(2412): Shutting down VM
        12-23 01:29:29.219: W/dalvikvm(2412): threadid=1: thread exiting with uncaught exception (group=0xb0f5e648)
        12-23 01:29:29.229: E/AndroidRuntime(2412): FATAL EXCEPTION: main
        12-23 01:29:29.229: E/AndroidRuntime(2412): java.lang.RuntimeException: Unable to start activity ComponentInfo{form.app.applicationform1/form.app.applicationform1.DetailsUsers}: java.lang.NullPointerException: println needs a message
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.os.Handler.dispatchMessage(Handler.java:99)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.os.Looper.loop(Looper.java:137)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.ActivityThread.main(ActivityThread.java:5103)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at java.lang.reflect.Method.invokeNative(Native Method)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at java.lang.reflect.Method.invoke(Method.java:525)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at dalvik.system.NativeStart.main(Native Method)
        12-23 01:29:29.229: E/AndroidRuntime(2412): Caused by: java.lang.NullPointerException: println needs a message
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.util.Log.println_native(Native Method)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.util.Log.d(Log.java:138)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at form.app.applicationform1.DetailsUsers.onCreate(DetailsUsers.java:28)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.Activity.performCreate(Activity.java:5133)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
        12-23 01:29:29.229: E/AndroidRuntime(2412):     ... 11 more

数据库代码如下:

import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHandler extends SQLiteOpenHelper{

    // Database Version
    private static final int DATABASE_VERSION = 1;
    // Database Name
    private static final String DATABASE_NAME = "userDB";
    // Employee table name
    private static final String TABLE_USERS = "users";

    private static String NAME = "name";
    private static String PHONE = "phone";
    private static String EMAIL  = "email";
    private static String ADDRESS = "address";
    private static String COMMENTS = "comments";
    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USERS + "("
                + NAME + " TEXT,"
                + PHONE + " TEXT,"
                + EMAIL + " TEXT,"
                + ADDRESS + " TEXT"
                + COMMENTS + " TEXT"
                + ")";
        db.execSQL(CREATE_USER_TABLE);
        //db.close();

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
        // Create tables again
        onCreate(db);

    }

    // Adding new user
    public int addUser(User user) 
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(NAME, user.getName());
        values.put(ADDRESS, user.getAddress());
        values.put(PHONE, user.getPhone());
        values.put(EMAIL, user.getEmail());
        values.put(COMMENTS, user.getComments());
        // Inserting Row
        int id = (int) db.insert(TABLE_USERS, null, values);
        db.close(); // Closing database connection
        return id;
    }

    //updating a existing user
    public int editUser(User user, String position) {
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues values = new ContentValues();
            values.put(NAME, user.getName());
            values.put(ADDRESS, user.getAddress());
            values.put(PHONE, user.getPhone());
            values.put(EMAIL, user.getEmail());
            values.put(COMMENTS, user.getComments());
            // updating row
            return db.update(TABLE_USERS, values, NAME + " = ?",
                    new String[] { String.valueOf(position) });
    }

    public User getUser(String id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(TABLE_USERS, new String[] { 
                NAME, ADDRESS, PHONE, EMAIL, COMMENTS }, NAME + "=?",
                new String[] {String.valueOf(id)}, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        User user = new User(cursor.getString(1),
                cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));
        db.close();
        // return user
        return user;

    }

        // LIst all users
        public String[] getAllUsers() {
            ArrayList<String> usersList = new ArrayList<String>();
            String selectQuery = "SELECT  * FROM " + TABLE_USERS;
            try {
                SQLiteDatabase db = this.getReadableDatabase();
                Cursor cursor = db.rawQuery(selectQuery, null);
                // looping through all rows and adding to list
                if (cursor.moveToFirst()) {
                    do {
                        String user = cursor.getString(1) + ", " + cursor.getString(2) +  ", " + cursor.getString(3) + ", " + cursor.getString(4) + ", " + cursor.getString(5);
                        usersList.add(user);
                    } while (cursor.moveToNext());
                }

                String[] users = new String[usersList.size()];
                db.close();
                return (usersList.toArray(users));
            }
            catch(Exception e) {
                Log.d("Error in getting users from DB", e.getMessage());
                return null;
            }
        }

}

如果需要更多信息,请与我们联系。请帮助解决这个问题

2 个答案:

答案 0 :(得分:0)

a)请为:

添加空结果错误处理
position = intent.getStringExtra("position");

b)另外,当您插入Extras时,请考虑添加.toString()

c)如果你没有检查位置,总是使用像Log.d这样的东西(&#34;意图的位置值&#34;,&#34;&#34; +位置)== null或者你可以编写自己的Log.d包装器来接受和处理空值。

答案 1 :(得分:0)

输入这样的查询,然后尝试。您在地址文本后缺少逗号,并在逗号后放置空格...:)

public void onCreate(SQLiteDatabase db) {
    String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USERS + "("
            + NAME + " TEXT, "
            + PHONE + " TEXT, "
            + EMAIL + " TEXT, "
            + ADDRESS + " TEXT, "
            + COMMENTS + " TEXT "
            + ")";
    db.execSQL(CREATE_USER_TABLE);

希望它有所帮助...