java.lang.RuntimeException:无法在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4254)上创建应用程序和

java.lang.RuntimeException:无法在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4254)上创建应用程序和,java,android,forceclose,Java,Android,Forceclose,我不熟悉android和java。我试图对照一个示例检查我的代码,但不知何故,当示例运行良好时,应用程序保持强制关闭。我需要帮助!提前谢谢!我只是将名称改为string而不是int。我不知道我是否为HistoryActivity修改了ArrayAdapter Logcat: 07-31 17:26:56.485: E/ArrayAdapter(20248): You must supply a resource ID for a TextView 07-31 17:26:56.490: D/An

我不熟悉android和java。我试图对照一个示例检查我的代码,但不知何故,当示例运行良好时,应用程序保持强制关闭。我需要帮助!提前谢谢!我只是将名称改为string而不是int。我不知道我是否为HistoryActivity修改了ArrayAdapter

Logcat:

07-31 17:26:56.485: E/ArrayAdapter(20248): You must supply a resource ID for a TextView
07-31 17:26:56.490: D/AndroidRuntime(20248): Shutting down VM
07-31 17:26:56.490: W/dalvikvm(20248): threadid=1: thread exiting with uncaught exception (group=0x40fdb2a0)
07-31 17:26:56.505: E/AndroidRuntime(20248): FATAL EXCEPTION: main
07-31 17:26:56.505: E/AndroidRuntime(20248): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.AbsListView.obtainView(AbsListView.java:2465)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.ListView.makeAndAddView(ListView.java:1775)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.ListView.fillDown(ListView.java:678)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.ListView.fillFromTop(ListView.java:739)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.ListView.layoutChildren(ListView.java:1628)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.AbsListView.onLayout(AbsListView.java:2300)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.View.layout(View.java:14072)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewGroup.layout(ViewGroup.java:4607)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.View.layout(View.java:14072)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewGroup.layout(ViewGroup.java:4607)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.View.layout(View.java:14072)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewGroup.layout(ViewGroup.java:4607)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1426)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.View.layout(View.java:14072)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewGroup.layout(ViewGroup.java:4607)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.View.layout(View.java:14072)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewGroup.layout(ViewGroup.java:4607)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1997)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1818)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1115)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4526)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.Choreographer.doFrame(Choreographer.java:525)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.os.Handler.handleCallback(Handler.java:615)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.os.Looper.loop(Looper.java:137)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.app.ActivityThread.main(ActivityThread.java:4921)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at java.lang.reflect.Method.invokeNative(Native Method)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at java.lang.reflect.Method.invoke(Method.java:511)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
07-31 17:26:56.505: E/AndroidRuntime(20248):    at dalvik.system.NativeStart.main(Native Method)
07-31 17:26:56.505: E/AndroidRuntime(20248): Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView
07-31 17:26:56.505: E/AndroidRuntime(20248):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379)
07-31 17:26:56.505: E/AndroidRuntime(20248):    ... 42 more
Contacts.java

 package com.Elson.ProjectVersion;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteException;
import android.util.Log;

public class Contacts implements Comparable<Contacts> {

    private long id;
    private String name;
    private int Phone;
    private int Email;
    private Date date;
    private double runningAverage;




    public Contacts(String name, int Phone,  Date date) {
        this.name = name;
        this.Phone = Phone;
        this.date = date;
    }

    public Contacts(long id, String name,int Phone) {
        this.id=id;
        this.Phone=Phone;
        this.name= (name);

    }


    public long getId() {

        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    public int getPhone() {
        return Phone;
    }
    public void setPhone(int Phone) {
        this.Phone = Phone;
    }
    public String getname() {
        return name;
    }
    public void setname(String name) {
        this.name = name;
    }
    public Date getDate() {
        return date;
    }

    public long getDateEpoch(){
        return date.getTime()/1000;
    }
    public void setDateEpoch(long seconds){
        date= new Date (seconds*1000);
    }
    public void setDate(Date date) {
        this.date = date;
    }




    public void setRunningAverage(double runningAverage) {
        this.runningAverage = runningAverage;
    }
    public boolean equals(Object that){
        Contacts bs = (Contacts) that;

        return this.date.equals(bs.date);
      }


    @Override



    public String toString() {
        String result;

        // "ID" + id +" "
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        result = df.format(date) + "" + name + "" + Phone ; 



        return result;
    }

    @Override
    public int compareTo(Contacts another) {
        // TODO Auto-generated method stub
        return 0;
    }

}
公共类MyContactSQL扩展了SQLiteOpenHelper{

public static final String DB_NAME ="MyContactSQL.SQLite";
public static final int DB_VERSION = 1;
public static String CONTACT_LIST_TABLE = "ContactListTable";
public static String RECORD_ID ="ID";
public  static String NAME = "NAME";
public static String PHONE_NUMBER="PhoneNumber";

public MyContactSQL(Context context) {
    super(context, DB_NAME, null, DB_VERSION);

}

@Override
public void onCreate(SQLiteDatabase contactListDB) {


    String sqlStatement = "create table " + CONTACT_LIST_TABLE 
            + " ("
            + RECORD_ID + " integer primary key autoincrement not null,"
            + NAME + " long,"
            + PHONE_NUMBER +" integer"
            +");";


           Log.d("Contact Database", sqlStatement);

           contactListDB.execSQL(sqlStatement);

}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

}

}
历史活动:

import java.util.ArrayList;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle; 
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class HistoryActivity extends ListActivity {

Bundle savedInstanceState;
private ArrayList <Contacts> allContacts;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.savedInstanceState = savedInstanceState;
    setContentView(R.layout.history_layout);

    //get data from the App
    ContactsActivityApplication app = (ContactsActivityApplication) getApplication();
    allContacts = app.getAllContacts();


    //View  --- Adapter  ------ Data 

    setListAdapter(
            new ArrayAdapter<Contacts> (this, R.layout.history_row,
                    allContacts
                    ));

        ListView listView = this.getListView();
        listView.setOnItemClickListener(
                 new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        verifyDeleteRow(position);
                        Log.d("DEBUG", "I hear item selected:" + position);
                        // TODO Auto-generated method stub

                    }

                 }

                 );
 }

private void verifyDeleteRow(final int position){
    //pop up a dialog to confirm delete row
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Delete this Series?")
           .setMessage("Do you want to delete this data?" + allContacts.get(position))
           .setCancelable(false)
           .setNegativeButton("NO! Leave it there!", 

                   new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    dialog.cancel(); 
                }
            })
           .setPositiveButton("Delete", 

            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    Contacts toDelete = allContacts.get(position);

                    ContactsActivityApplication app = (ContactsActivityApplication) getApplication();
                    app.deleteBowlingScores(toDelete);
                    // TODO Auto-generated method stub
                    onCreate(savedInstanceState);
                }
            });

    AlertDialog alert = builder.create();
    alert.show();

}
}
import java.util.ArrayList;
导入android.app.AlertDialog;
导入android.app.ListActivity;
导入android.content.DialogInterface;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类HistoryActivity扩展了ListActivity{
束保存状态;
私人ArrayList allContacts;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.savedInstanceState=savedInstanceState;
setContentView(R.layout.history\u布局);
//从应用程序获取数据
ContactsActivityApplication应用程序=(ContactsActivityApplication)getApplication();
allContacts=app.getAllContacts();
//视图---适配器------数据
setListAdapter(
新阵列适配器(此,右侧布局,历史记录),
所有联系人
));
ListView ListView=this.getListView();
listView.setOnItemClickListener(
新的MClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
验证删除行(位置);
Log.d(“调试”,“我听到所选项目:“+位置”);
//TODO自动生成的方法存根
}
}
);
}
私有无效验证删除行(最终整数位置){
//弹出对话框确认删除行
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setTitle(“删除此系列?”)
.setMessage(“是否要删除此数据?”+allContacts.get(位置))
.setCancelable(错误)
.setNegativeButton(“不!放在那里!”,
新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
//TODO自动生成的方法存根
dialog.cancel();
}
})
.setPositiveButton(“删除”,
新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
Contacts toDelete=所有Contacts.get(位置);
ContactsActivityApplication应用程序=(ContactsActivityApplication)getApplication();
附录.删除Bowlingscores(toDelete);
//TODO自动生成的方法存根
onCreate(savedInstanceState);
}
});
AlertDialog alert=builder.create();
alert.show();
}
}

要传递给
df.format
日期
对象为空,这会导致
NullPointerException

public String toString() {
    String result;

    // "ID" + id +" "
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
    result = df.format(date) + "" + name + "" + Phone ; 
             ^^^^^^^^^^^^^^^
             date object is null above


    return result;
}
您需要对
日期
实例执行空检查

if(date != null) {
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        result = df.format(date) + "" + name + "" + Phone ; 
}
else {
      result = name + "" + Phone ; 
}

我认为当您尝试在此处使用
date
varibale进行解析时,它没有初始化:

result = df.format(date) + "" + name + "" + Phone ; 
因此,在将其传递给parse之前,请确保已对其进行了初始化


只发布与您的问题相关的代码。除非需要,否则不要发布完整的代码。这会造成很多混乱

对不起,我是新来的。非常抱歉。是的,它可以工作。但是现在当我按下历史记录按钮时,它会再次强制关闭。我想这是关于ArrayAdapter的。我已经更新了上面的日志。请帮助我。然后提前很多!
public String toString() {
    String result;

    // "ID" + id +" "
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
    result = df.format(date) + "" + name + "" + Phone ; 
             ^^^^^^^^^^^^^^^
             date object is null above


    return result;
}
if(date != null) {
        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
        result = df.format(date) + "" + name + "" + Phone ; 
}
else {
      result = name + "" + Phone ; 
}
result = df.format(date) + "" + name + "" + Phone ;