我在运行时不断收到 Nullpointexceptionerror。根据 logcat,错误是由第 43 行引起的,即:
Database databaseNieuw = new Database(new File(naamDatabase), Version.DBASE_4);
该行中唯一可能引发此类错误的是 naamDatabase,它是从 EditText 字段获取的字符串。它们都在第 43 行以上定义。
任何帮助将不胜感激。
日志猫:
01-15 23:44:40.292: E/Trace(20437): error opening trace file: No such file or directory (2)
01-15 23:44:46.769: E/AndroidRuntime(20437): FATAL EXCEPTION: main
01-15 23:44:46.769: E/AndroidRuntime(20437): java.lang.NullPointerException
01-15 23:44:46.769: E/AndroidRuntime(20437): at nl.knaw.dans.common.dbflib.Database.<init>(Database.java:112)
01-15 23:44:46.769: E/AndroidRuntime(20437): at nl.knaw.dans.common.dbflib.Database.<init>(Database.java:64)
01-15 23:44:46.769: E/AndroidRuntime(20437): at com.example.bosbouwapp.screen1$2.onClick(screen1.java:43)
01-15 23:44:46.769: E/AndroidRuntime(20437): at android.view.View.performClick(View.java:4102)
01-15 23:44:46.769: E/AndroidRuntime(20437): at android.view.View$PerformClick.run(View.java:17085)
01-15 23:44:46.769: E/AndroidRuntime(20437): at android.os.Handler.handleCallback(Handler.java:615)
01-15 23:44:46.769: E/AndroidRuntime(20437): at android.os.Handler.dispatchMessage(Handler.java:92)
01-15 23:44:46.769: E/AndroidRuntime(20437): at android.os.Looper.loop(Looper.java:155)
01-15 23:44:46.769: E/AndroidRuntime(20437): at android.app.ActivityThread.main(ActivityThread.java:5454)
01-15 23:44:46.769: E/AndroidRuntime(20437): at java.lang.reflect.Method.invokeNative(Native Method)
01-15 23:44:46.769: E/AndroidRuntime(20437): at java.lang.reflect.Method.invoke(Method.java:511)
01-15 23:44:46.769: E/AndroidRuntime(20437): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
01-15 23:44:46.769: E/AndroidRuntime(20437): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
01-15 23:44:46.769: E/AndroidRuntime(20437): at dalvik.system.NativeStart.main(Native Method)
代码:
package com.example.bosbouwapp;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import nl.knaw.dans.common.dbflib.Database;
import nl.knaw.dans.common.dbflib.Field;
import nl.knaw.dans.common.dbflib.InvalidFieldLengthException;
import nl.knaw.dans.common.dbflib.InvalidFieldTypeException;
import nl.knaw.dans.common.dbflib.Type;
import nl.knaw.dans.common.dbflib.Version;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class screen1 extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen1);
Button terug = (Button) findViewById(R.id.button2);
terug.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), home.class);
startActivityForResult(myIntent, 0);
}
});
Button next = (Button) findViewById(R.id.button3);
next.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
EditText databaseNaam = (EditText) findViewById(R.id.database_naam);
String naamDatabase = databaseNaam.getText().toString();
Database databaseNieuw = new Database(new File(naamDatabase), Version.DBASE_4);
Global g = (Global) getApplication();
List<Field> fields = new ArrayList<Field>();
List<Field> fields2 = new ArrayList<Field>();
if (naamDatabase.trim().equals("")) {
Toast.makeText(getApplication(), "Veld is leeg", Toast.LENGTH_SHORT).show();
}
else{
fields.add(new Field("Stapel", Type.NUMBER, 3));
fields.add(new Field("Boomsoort", Type.CHARACTER, 25));
fields.add(new Field("Diameter", Type.NUMBER, 4));
fields.add(new Field("Lengte", Type.NUMBER, 2));
fields.add(new Field("Overig", Type.CHARACTER, 150));
try {
databaseNieuw.addTable("Boomstam", fields);
} catch (InvalidFieldTypeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvalidFieldLengthException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
fields2.add(new Field("Stapel", Type.CHARACTER, 50));
fields2.add(new Field("Datum", Type.DATE));
fields2.add(new Field("X", Type.NUMBER, 20));
fields2.add(new Field("Y", Type.NUMBER, 20));
fields2.add(new Field("Houtsoort", Type.CHARACTER, 50));
try {
databaseNieuw.addTable("Houtstapel", fields2);
} catch (InvalidFieldTypeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidFieldLengthException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
g.setDatabaseNieuw(databaseNieuw);
Intent myIntent = new Intent(view.getContext(), screen3.class);
startActivityForResult(myIntent, 0);
}
}
});
}
}
编辑
我目前正在研究 Database.class。因为我(还)不能真正做出正面或反面,也许其他人可以。
Database.class的代码:
// Decompiled by DJ v3.12.12.96 Copyright 2011 Atanas Neshkov Date: 1/16/2013 12:48:01 AM
// Home Page: http://members.fortunecity.com/neshkov/dj.html http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: Database.java
package nl.knaw.dans.common.dbflib;
import java.io.File;
import java.nio.charset.Charset;
import java.util.*;
// Referenced classes of package nl.knaw.dans.common.dbflib:
// Table, Version, InvalidFieldTypeException, InvalidFieldLengthException
public class Database
{
public Database(File databaseDirectory, Version version)
{
this(databaseDirectory, version, Charset.defaultCharset().name());
}
public Database(File databaseDirectory, Version version, String charsetName)
{
tableMap = new HashMap();
if(databaseDirectory == null || databaseDirectory.isFile())
throw new IllegalArgumentException("Database must be a directory ");
if(!databaseDirectory.exists())
databaseDirectory.mkdirs();
this.databaseDirectory = databaseDirectory;
this.version = version;
this.charsetName = charsetName != null ? charsetName : Charset.defaultCharset().name();
Charset.forName(this.charsetName);
String fileNames[] = databaseDirectory.list();
String arr$[] = fileNames;
int len$ = arr$.length;
for(int i$ = 0; i$ < len$; i$++)
{
String fileName = arr$[i$];
if(fileName.toLowerCase().endsWith(".dbf") && fileName.length() > ".dbf".length())
addTable(fileName);
}
}
public Set getTableNames()
{
return Collections.unmodifiableSet(tableMap.keySet());
}
public Table getTable(String name)
{
return (Table)tableMap.get(name);
}
public Table addTable(String name, List fields)
throws InvalidFieldTypeException, InvalidFieldLengthException
{
Table table = (Table)tableMap.get(name);
if(table == null)
{
table = new Table(new File(databaseDirectory, name), version, fields);
tableMap.put(name, table);
}
return table;
}
private void addTable(String name)
{
Table table = (Table)tableMap.get(name);
if(table == null)
{
table = new Table(new File(databaseDirectory, name), charsetName);
tableMap.put(name, table);
}
}
public void removeTable(String name)
{
tableMap.remove(name);
}
public void removeTable(Table table)
{
tableMap.remove(table.getName());
}
public String getCharsetName()
{
return charsetName;
}
private final File databaseDirectory;
private final Map tableMap;
private final Version version;
private final String charsetName;
}