活动无法启动

时间:2015-02-04 14:02:00

标签: java android android-activity

我创建了一个新活动,它应该读取文本文件中的元素,然后将它们显示为ListView,但是当我尝试通过在模拟器中单击其图标来启动活动时,我收到此错误消息:

  

不幸的是,应用已停止工作

我不明白为什么,因为项目似乎已经正确编译了?

PS:我尝试打开的活动是SortedLocationsListActivity

Logcat错误消息:

02-04 13:51:32.340    2900-2900/fr.isima.android.tp1.tp1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: fr.isima.android.tp1.tp1, PID: 2900
    java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.isima.android.tp1.tp1/fr.isima.android.tp1.tp2.SortedLocationsListActivity}: java.lang.NumberFormatException: Invalid long: "1400390852000A"
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NumberFormatException: Invalid long: "1400390852000A"
            at java.lang.Long.invalidLong(Long.java:124)
            at java.lang.Long.parse(Long.java:366)
            at java.lang.Long.parseLong(Long.java:353)
            at fr.isima.android.tp1.tp2.SortedLocationsListActivity.onCreate(SortedLocationsListActivity.java:37)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

这是我的SortedLocationsListActivity的一部分(我修改了onCreate方法):

public class SortedLocationsListActivity extends ListActivity {

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


        InputStream is = getResources().openRawResource(R.raw.locations);
        BufferedReader in = new BufferedReader(new InputStreamReader(is));
        List<String> maListe = new ArrayList<String>();
        String myligne;
        LocationAdapter adapter = new LocationAdapter(this, R.layout.row_location);

        try {
            while((myligne = in.readLine()) != null)
            {
                String a[] = myligne.split(";");
                Long _date=Long.parseLong(a[2], 36);
                System.out.println(a[0]+" "+a[1]+" "+a[2]);
                adapter.addLocation(a[0],a[1],_date);
            }
            setListAdapter(adapter);

        }
        catch(IOException e)
        {
            System.out.println("Error");
        }


    }

好的,导致问题的代码是:

Long _date=Long.parseLong(a[2], 36);

基本上我想要做的就是转换String,这可能是&#34; 1400390852000A&#34;例如,对于Long类型,我该如何正确地完成它?

好的,我更正了错误并且我设法启动了活动,但它只显示一个空白屏幕而不是我想要的列表,这是我编码的适配器:

&#13;
&#13;
public class LocationAdapter extends BaseAdapter {

        private List<Location> Locations;
        int monLayout;
        LayoutInflater inflater;


        public LocationAdapter(Context context, int layout){
            monLayout=layout;
            inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            Locations = new ArrayList<Location>();
        }



        private class Location{
            public String name;
            public String address;
            public Long date;

            public Location(String _name,String _address , Long _date){
                name=_name;
                address=_address;
                date=_date;

            }
        }


        private class ViewHolder{

            TextView name_view;
            TextView address_view;
            TextView date_view;

            public ViewHolder(View rowLayout){

                name_view = (TextView)rowLayout.findViewById(R.id.name);
                date_view = (TextView)rowLayout.findViewById(R.id.date);
                address_view = (TextView)rowLayout.findViewById(R.id.address);
            }
        }

        public void addLocation(String _name,String _address,Long _date){
            //Création d'une nouvelle location avec les données en paramètres
            Location new_loc = new Location(_name, _address,_date);

            //Ajout de la location à la liste des locations
            Locations.add(new_loc);

        }
    /*Méthodes de la classe mère*/

        @Override
        public int getCount() {
            return 0;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            View view = convertView;

            if (view == null)
                view = inflater.inflate(monLayout, parent, false);

            ViewHolder holder = (ViewHolder)view.getTag();
            if (holder == null)
            {
                holder = new ViewHolder(view);
                view.setTag(holder);
            }

            Location location = (Location)getItem(position);

            holder.name_view.setText(location.name);
            holder.address_view.setText(location.address);
            holder.date_view.setText("Test");

            return view;
        }
}
&#13;
&#13;
&#13;

有人可以告诉我问题可能来自哪里吗?

2 个答案:

答案 0 :(得分:1)

原因是这个&gt;&gt; java.lang.NumberFormatException:无效长:“1400390852000A”

您正尝试在活动中将字符串类型转换为Long.parseLong。纠正这个并且它会起作用。

字符串值&gt;&gt; 1400390852000A,无法转换为Long。

检查你的SortedLocationsListActivity行号37. Bug就在那里,杀了它:)

答案 1 :(得分:0)

查看SortedLocationsListActivity第37行。

它看起来像一个NumberFormatException:无效长:“1400390852000A”。

检查参数:

Long _date=Long.parseLong(a[2], 36);