1

私はAndroid開発に非常に慣れていないことに注意することから始めなければならないので、私の質問がばかげていると思われる場合は申し訳ありません. アプリケーションで SQLite データベースにクエリを実行して、アクティビティのコンテンツを動的に作成しようとしています。データベースヘルパーファイルのクエリは次のとおりです

    public Cursor getWhereToEatActivity (int LocationId)
{
    Cursor cursor = myDataBase.rawQuery("SELECT Location.locationId as _id,Location.title,Location.desc, location.address, location.hours, location.website, location.phone FROM " +
            "TripWhereToEat JOIN Trip ON TripWhereToEat.tripId = Trip.tripId JOIN Location ON " +
            "Location.locationId = TripWhereToEat.locationId where TripWhereToEat.tripId = ?",
            new String[] {Integer.toString(LocationId)});

    cursor.moveToFirst();
    return cursor;
}

アイテムを選択した場所は次のとおりです。

 @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

                LocationListitem locationItem = (LocationListitem)lvItems.getItemAtPosition(position);

                int locationId = locationItem.getLocationId();

                // Pass the ID into the next activity
                Map<String, String> parms = new HashMap<String, String>();
                parms.put("locationId", Integer.toString(locationId));
                if (listType.equals("whattosee")) {
                    // switchActivity(WhatToSeeActivity.class, parms);
                }
                if (listType.equals("wheretostay")) {
                    // switchActivity(WhereToStayActivity.class, parms);
                }
                if (listType.equals("wheretoeat")) {
                    switchActivity(WhereToEatActivity.class, parms);
                }
              }
            });

そして、ここにアクティビティが切り替えられます:

public class WhereToEatActivity extends FragmentActivityBase {

private int LocationId;

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

    AndroidApplication app = (AndroidApplication)getApplication();

    DatabaseHelper myDbHelper = app.getDatabase(); // new DatabaseHelper(this);

    LocationId = Integer.valueOf(this.getParam("LocationId"));

    Cursor tripRecord = myDbHelper.getWhereToEatActivity(LocationId);

    tripRecord.moveToFirst();

    if (!tripRecord.isAfterLast()) {
        String name = tripRecord.getString(tripRecord.getColumnIndex("title"));
        String title = tripRecord.getString(tripRecord.getColumnIndex("desc"));
        String image = tripRecord.getString(tripRecord.getColumnIndex("image"));
        String address = tripRecord.getString(tripRecord.getColumnIndex("address"));

        ImageView mainImageView = (ImageView)findViewById(R.id.image);
        int resId = getResources().getIdentifier("com.integrativelogic.roadtrip:drawable/"+image, null, null); 
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),resId);
        if (bitmap != null)
            mainImageView.setImageBitmap (bitmap);    

        TextView nameView = (TextView)findViewById(R.id.name);
        nameView.setText(name);

        TextView titleView = (TextView)findViewById(R.id.title);

        titleView.setText(Html.fromHtml(title));
        titleView.setMovementMethod(LinkMovementMethod.getInstance());

        TextView addressView = (TextView)findViewById(R.id.address);
        addressView.setText(address);
    }

    tripRecord.close();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}

そして、これは Logcat から得られるエラーです。

01-12 11:23:52.186: E/AndroidRuntime(15238): FATAL EXCEPTION: main
01-12 11:23:52.186: E/AndroidRuntime(15238): java.lang.RuntimeException: Unable to start  activity ComponentInfo{com.integrativelogic.roadtrip/com.integrativelogic.roadtrip.WhereToEatActivity}: java.lang.NumberFormatException: unable to parse '' as integer
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1821)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.app.ActivityThread.access$1500(ActivityThread.java:132)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.os.Looper.loop(Looper.java:150)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.app.ActivityThread.main(ActivityThread.java:4263)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at java.lang.reflect.Method.invokeNative(Native Method)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at java.lang.reflect.Method.invoke(Method.java:507)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at dalvik.system.NativeStart.main(Native Method)
01-12 11:23:52.186: E/AndroidRuntime(15238): Caused by: java.lang.NumberFormatException: unable to parse '' as integer
01-12 11:23:52.186: E/AndroidRuntime(15238):    at java.lang.Integer.parseInt(Integer.java:362)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at java.lang.Integer.parseInt(Integer.java:332)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at java.lang.Integer.valueOf(Integer.java:506)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at com.integrativelogic.roadtrip.WhereToEatActivity.onCreate(WhereToEatActivity.java:27)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
01-12 11:23:52.186: E/AndroidRuntime(15238):    at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
4

2 に答える 2

0

初めての方は、次のようにアプリが突然クラッシュした場合のデバッグプロセスについて少し説明します。

最初の部分は、LogCat出力の最後の数行で読み取られます。

原因:java.lang.NumberFormatException:''を整数として解析できません

したがって、空の文字列を整数にしようとすると問題が発生することがわかります。整数を作成できるのは、数値を含む文字列からのみです。

ログのその下の数行に表示されます

com.integrativelogic.roadtrip.WhereToEatActivity.onCreate(WhereToEatActivity.java:27)で

それで、WhereToEatActivityの27行目で発生することがわかります。ここに投稿したものの行数は数えませんが、この行だと思います。

LocationId = Integer.valueOf(this.getParam("LocationId"));

したがって、このエラーが発生している理由は、パラメータ「LocationId」がないか、パラメータが空であるためであると考えるのが安全だと思います。

于 2013-01-12T16:50:05.320 に答える
0

エラーはここにあります:

Caused by: java.lang.NumberFormatException: unable to parse '' as integer

ここに空の場所があると思います:

LocationId = Integer.valueOf(this.getParam("LocationId"));

その行がここで参照されている場合:

at com.integrativelogic.roadtrip.WhereToEatActivity.onCreate(WhereToEatActivity.java:27)
于 2013-01-12T16:51:55.630 に答える