2012-02-29 3 views
2

В моем приложении первый экран - это список, и когда вы нажимаете один раз, все идет нормально, но если моя ошибка или что-то еще, вы нажимаете два или более раза, прежде чем загружать приложения. Я делал небольшое исследование, но ничего не нашел. Я публикую свой код:Приложение вылетает, когда вы нажимаете несколько раз

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.firstscreen); 
    // Set title 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, 
      R.layout.mainheader); 

    // Get Arguments 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     app = extras.getString("app"); 
    } 

    //Set simulation date 
    TextView date = (TextView) findViewById(R.id.date); 
    date.setText(convertDateToString()); 
    // set the list adapter: ListView myList = 
    ListView lv = (ListView) findViewById(R.id.list); 
    DataBaseAccess ddbb = new DataBaseAccess(); 
    //Download the data from a database 
    lv.setAdapter(new MyAdapter(this, R.layout.listitem, myLines, 
      flowAlarm, precAlarm)); 
    lv.setTextFilterEnabled(true); 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      Intent i = new Intent(Main.this, ShowGraph.class); 
      String[] obj = list.split(";"); 
      i.putExtra("object name", obj[position]); 
      i.putExtra("app name", app); 
      i.putExtra("app list", list); 
      startActivity(i); 

     } 
    }); 

    // Set buttons clickable 
    Button exit = (Button) findViewById(R.id.exit); 
    exit.setOnClickListener(this); 
    Button calendar = (Button) findViewById(R.id.calendar); 
    calendar.setOnClickListener(this); 
} 

Кто-нибудь знает почему?

Мой LogCat:

02-29 13:51:27.975: E/AndroidRuntime(9082): FATAL EXCEPTION: main 
02-29 13:51:27.975: E/AndroidRuntime(9082): java.lang.NullPointerException 
02-29 13:51:27.975: E/AndroidRuntime(9082):at org.achartengine.chart.XYChart.toRealPoint(XYChart.java:699) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at org.achartengine.tools.Pan.apply(Pan.java:64) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at org.achartengine.TouchHandler.handleTouch(TouchHandler.java:106) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at org.achartengine.GraphicalView.onTouchEvent(GraphicalView.java:284) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.view.View.dispatchTouchEvent(View.java:3952) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
02-29 13:51:27.975: E/AndroidRuntime(9082):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
02-29 13:51:27.975: E/AndroidRuntime(9082):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
02-29 13:51:27.975: E/AndroidRuntime(9082):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1711) 
02-29 13:51:27.975: E/AndroidRuntime(9082):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1145) 
02-29 13:51:27.975: E/AndroidRuntime(9082):  at android.app.Activity.dispatchTouchEvent(Activity.java:2096) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1695) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2217) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.view.ViewRoot.handleMessage(ViewRoot.java:1901) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.os.Handler.dispatchMessage(Handler.java:99) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.os.Looper.loop(Looper.java:130) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at android.app.ActivityThread.main(ActivityThread.java:3701) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at java.lang.reflect.Method.invokeNative(Native Method) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at java.lang.reflect.Method.invoke(Method.java:507) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) 
02-29 13:51:27.975: E/AndroidRuntime(9082):at dalvik.system.NativeStart.main(Native Method) 

ShowGraph активность OnCreate:

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    // Get arguments 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     object = extras.getString("object name"); 
     app = extras.getString("app name"); 
     list = extras.getString("app list"); 
    } 
    // Set title 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.main); 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, 
      R.layout.headermenu); 
    // Download the info from the database 

    downloadInfo(app, object); 

    // set the button listeners 
    listeners(); 
    //Set checkbox listeners 
    setCheckListeners(); 

    // Drag Meteo 
    vg = (RelativeLayout) findViewById(R.id.graph); 
    vg.setOnTouchListener(new View.OnTouchListener() { 
     RelativeLayout vg1 = (RelativeLayout) findViewById(R.id.graph1); 

     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_MOVE: 
       // int x = (int) event.getX() - offset_x; 
       int y = (int) event.getY() - offset_y; 
       int w = getWindowManager().getDefaultDisplay().getWidth(); 
       int h = vg.getHeight() - 40; 
       if (y < 0) 
        y = 0; 
       if (y > h) 
        y = h; 
       RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
         new ViewGroup.MarginLayoutParams(
           RelativeLayout.LayoutParams.FILL_PARENT, 
           RelativeLayout.LayoutParams.WRAP_CONTENT)); 
       lp.setMargins(0, y, 0, 0); 
       selected_item.setLayoutParams(lp); 
       int height = vg1.getHeight(); 
       RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
         new ViewGroup.MarginLayoutParams(
           RelativeLayout.LayoutParams.FILL_PARENT, 
           RelativeLayout.LayoutParams.WRAP_CONTENT)); 
       lp2.setMargins(0, 0, 0, Math.abs(vg.getHeight() - y)); 
       // lp2.height = y-height; 
       vg1.setLayoutParams(lp2); 
       break; 
      default: 
       break; 
      } 
      return true; 
     } 
    }); 
    RelativeLayout img = (RelativeLayout) findViewById(R.id.vg); 
    img.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       offset_x = (int) event.getX(); 
       offset_y = (int) event.getY(); 
       selected_item = v; 
       break; 
      default: 
       break; 
      } 
      return false; 
     } 
    }); 
} 

Я попытался с AsyncTask как я прочитал здесь, но не работает:

Android: Disable ListView once clicked?

+0

Что отображается в вашем логарифме? – jyotiprakash

+0

Я отредактировал вопрос с логарифмом, хотя я не могу исправить его в исходной форме кода, не знаю, почему! Извините ... это немного грязно, чтобы видеть это так! Я также редактирую содержимое списка в XML-макете! – Lucia

+0

Что такое «Исключение»? вы не включили это в свой логарифмический пост ... – herom

ответ

0

Что я сделал для его решения, так это добавить ProgressDialog, чтобы люди не нажимали несколько раз, когда загружалась новая активность.

MyDialog = ProgressDialog.show(ShowGraph.this, ""," Loading. Please wait ... ", true); 
1

В ShowGraph:

if (extras != null) { 
    object = extras.getString("object name"); 
    app = extras.getString("app name"); 
    list = extras.getString("app list"); 
} 

Если ваш extras имеет значение NULL, то ваш app также имеет значение null. Поэтому проблема может быть там

downloadInfo(app, object); //NullPointerException 

ТАКЖЕ

1) Обратите внимание, что onCreate() вызывается один раз (только для первого щелчка). Лучше переместить часть «получить намерение» в метод onStart().

2) Используйте инструменты debbuging или попытайтесь скрыть свой код с блоками комментариев блоком, чтобы найти, где именно NullPointerException точно.

/*Like this 
downloadInfo(app, object); 
*/ 
+0

Нет, это не так, в downloadInfo. Я проверяю, являются ли они нулевыми или нет, и делают разные вещи в каждом случае. Если я нажму сразу, как только он будет работать, но если я дважды щелкну, он сработает! Благодаря! – Lucia

+0

@ Lucia, отредактировал мой ответ. Специально прочитайте второй пункт. –

+0

Но что вы подразумеваете в точности: попытайтесь скрыть свой код с комментариями по блоку? – Lucia

Смежные вопросы