我是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;
}
}
}
如果需要更多信息,请与我们联系。请帮助解决这个问题
答案 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);
希望它有所帮助...