2013-08-07 1 views
-1

Я получаю нулевое значение для nameArr в следующем исходном коде, и я не уверен, почему.Null Значение для nameArr в ArrayList

При попытке использовать следующее:

System.out.println("testing123"); 
System.out.println(nameArr); 

Я получаю:

08-07 19:51:53.540: I/System.out(1048): testing123 
08-07 19:51:53.540: I/System.out(1048): [] 

Это кажется, что это нуль в этой точке - любые предложения?

Я действительно не знаю, почему это происходит.

ИСТОЧНИК:

public class UpdateActivity extends Activity implements OnClickListener { 
    public static ArrayList<String> NameArr = new ArrayList<String>(); 
    public static ArrayList<String> ValueArr = new ArrayList<String>(); 
    public static ArrayList<String> nameArr = new ArrayList<String>(); 
    public static ArrayList<String> ApnArr = new ArrayList<String>(); 
    public static ArrayList<String> mmscArr = new ArrayList<String>(); 
    public static ArrayList<String> mmsportArr = new ArrayList<String>(); 
    public static ArrayList<String> mmsproxyArr = new ArrayList<String>(); 
    public static ArrayList<String> portArr = new ArrayList<String>(); 
    public static ArrayList<String> proxyArr = new ArrayList<String>(); 
    public static int count; 
    AlertDialog mErrorAlert = null; 
    public static int TotalSteps = 8; 
    private TelephonyManager tm; 
    private static final String LOG_TAG = "STDataSettings"; 
    private Button mUpdateButton = null; 
    private Button mAssistUpdateButton = null; 
    private Button mAssistInstrButton = null; 
    private TextView mReadAgainButton = null; 
    private int mInstructionNumber = 0; 
    AlertDialog mConfirmAlert = null; 
    public static InputStream stream = null; 
    public static XmlParserHandlerFinal handler; 
    private NetworkTask task; 
    private AnimationDrawable loadingAnimation; 
    private static final String TAG = "UpdateActivity"; 
    Context ctx; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
     int networkType = tm.getNetworkType(); 
     int phoneType = tm.getPhoneType(); 
     task = new NetworkTask(); 
     handler = new XmlParserHandlerFinal(); 

     handler.setContext(ctx); 
     int version = android.os.Build.VERSION.SDK_INT; 
     if (phoneType == TelephonyManager.PHONE_TYPE_CDMA 
       || (phoneType != TelephonyManager.PHONE_TYPE_GSM 
         && networkType != TelephonyManager.NETWORK_TYPE_GPRS 
         && networkType != TelephonyManager.NETWORK_TYPE_EDGE 
         && networkType != TelephonyManager.NETWORK_TYPE_HSDPA 
         && networkType != TelephonyManager.NETWORK_TYPE_HSPA 
         && networkType != TelephonyManager.NETWORK_TYPE_HSPAP 
         && networkType != TelephonyManager.NETWORK_TYPE_HSUPA 
         && networkType != TelephonyManager.NETWORK_TYPE_UMTS && networkType != TelephonyManager.NETWORK_TYPE_LTE)) { 
      // If the phone type is CDMA or 
      // the phone phone type is not GSM and the network type is none of 
      // the network types indicated in the statement 
      // Display incompatibility message 
      showAlert(getString(R.string.incomp_sm_dialog)); 
      // Network type is looked because some tablets have no phone type. 
      // We rely on network type in such cases 
     } else if (!(tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT 
       || (tm.getSimOperator()) 
         .equals(getString(R.string.numeric_tmo)) || (tm 
        .getSimOperator()).equals(getString(R.string.numeric_att)))) { 
      // if SIM is present and is NOT a T-Mo network SIM, 
      // display Error message alert indicating to use SM SIM 
      showAlert(getString(R.string.insert_sm_dialog)); 
     }// No SIM or SIM with T-Mo MNC MCC present 
     else if (version < VERSION_CODES.ICE_CREAM_SANDWICH) { 
      // Initial UI setup for versions lower than ICS 
      setContentView(R.layout.update); 
      mUpdateButton = (Button) findViewById(R.id.update_button); 

      mUpdateButton.setOnClickListener(this); 
     } else {// ICS and up 

      // task.execute(); 

      if ((tm.getSimOperator()).equals(getString(R.string.numeric_tmo)) 
        || (tm.getSimOperator()) 
          .equals(getString(R.string.numeric_att))) { 
       // Update APN table in separate thread 
       task.execute(""); 

       // Device has T-Mo network SIM card MCC and MNC correctly 
       // populated 
       // Reduce number of steps to 6 
       TotalSteps = 6; 
      } 
      // 
      // Initial UI setup for ICS and up 

     // setContentView(R.layout.updating); 



      // String assistUpdate = getString(R.string.apn_app_text_cta2); 
      // CharSequence styledText = Html.fromHtml(assistUpdate); 
      // xtView assistText = (TextView) 
      // findViewById(R.id.apn_app_text_cta2); 
      // sistText.setText(styledText); 
      // mAssistUpdateButton = (Button) 
      // findViewById(R.id.assist_update_btn); 
      //mAssistUpdateButton.setOnClickListener(this); 
     } 
    } 

    public void onClick(View v) { 

     if (v == mUpdateButton) { 
      // Update button for versions lower than ICS is selected 
      // setContentView(R.layout.updating); 
      onClickMethod(v); 

      Intent i = new Intent(this, ConfigFinalActivity.class); 
      startActivity(i); 
      finish(); 
     } else if (v == mAssistUpdateButton) { 

      // Update button for ICS and up is selected 
      // Get the TextView in the Assist Update UI 
      TextView tv = (TextView) findViewById(R.id.apn_app_text_cta2); 
      String text = ""; 
      CharSequence styledText = text; 
      switch (mInstructionNumber) { 
      case 0: 
       // Retrieve the instruction string resource corresponding the 
       // 2nd set of instructions 
       text = String.format(getString(R.string.apn_app_text_instr), 
         TotalSteps); 
       styledText = Html.fromHtml(text); 
       // Update the TextView with the correct set of instructions 
       tv.setText(styledText); 
       // Increment instruction number so the correct instructions 
       // string resource can be retrieve the next time the update 
       // button is pressed 
       mInstructionNumber++; 
       break; 
      case 1: 
       text = getString(R.string.apn_app_text_instr2); 
       styledText = Html.fromHtml(text); 
       tv.setText(styledText); 
       // Increment instruction number so the correct instructions 
       // string resource can be retrieve the next time the update 
       // button is pressed 
       mInstructionNumber++; 
       break; 
      case 2: 
       // Final set of instructions-Change to the corresponding layout 

       setContentView(R.layout.assist_instructions); 
       String assistUpdateInstr = String.format(
         getString(R.string.apn_app_text_instr3), TotalSteps); 
       styledText = Html.fromHtml(assistUpdateInstr); 
       TextView assistInstrText = (TextView) findViewById(R.id.updated_text); 
       assistInstrText.setText(styledText); 
       mAssistInstrButton = (Button) findViewById(R.id.assist_instr_btn); 
       mReadAgainButton = (TextView) findViewById(R.id.read_again_btn); 
       mAssistInstrButton.setOnClickListener(this); 
       mReadAgainButton.setOnClickListener(this); 
      } 
     } else if (v == mAssistInstrButton) { 
      // "LET'S DO THIS" Button in final instructions screen for ICS and 
      // up is selected 
      // Create ConfigActivity Intent 
      Intent i = new Intent(this, ConfigFinalActivity.class); 
      // Invoke ConfigActivity Intent to start the assisted update 
      startActivity(i); 
      finish(); 
     } else if (v == mReadAgainButton) { 
      // go back to 1st set of instructions if read again is selected 
      mInstructionNumber = 0; 
      setContentView(R.layout.assist_update); 
      String assistUpdate = getString(R.string.apn_app_text_cta2); 
      CharSequence styledText = Html.fromHtml(assistUpdate); 
      TextView assistText = (TextView) findViewById(R.id.apn_app_text_cta2); 
      assistText.setText(styledText); 
      mAssistUpdateButton = (Button) findViewById(R.id.assist_update_btn); 
      mAssistUpdateButton.setOnClickListener(this); 
     } 
    } 

    public void onClickMethod(View v) { 
     mUpdateButton = (Button) findViewById(R.drawable.btn_update_active_hdpi); 

    } 

    private void showAlert(String message) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage(message).setPositiveButton("OK", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         UpdateActivity.this.finish(); 
        } 
       }); 
     mConfirmAlert = builder.create(); 
     mConfirmAlert.show(); 
    } 
    // AsyncTask to call web service 
     private class NetworkTask extends AsyncTask<String, Integer, InputStream> { 

      @Override 
      protected void onPreExecute() { 

       super.onPreExecute(); 
      } 

      @Override 
      protected InputStream doInBackground(String... params) { 

       try { 
        // saving the response in InputStream 
        stream = getQueryResults("https://dl.dropboxusercontent.com/u/31771876/GetPhoneSettings-rsp-eng.xml"); 
       // stream = new BufferedInputStream(https.getInputStream()); 
          DataInputStream in = new DataInputStream(stream); 
           BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
          String strLine; 
           while ((strLine = br.readLine()) != null) { // Print the content on the console 
           System.out.println (strLine); 
            in.close(); 
           } 


       } catch (IOException e) { 

        Log.v(LOG_TAG, e.toString()); 
        e.printStackTrace(); 
       } catch (SAXException e) { 

        Log.v(LOG_TAG, e.toString()); 
        e.printStackTrace(); 
       } catch (Exception e) { 

        Log.v(LOG_TAG, e.toString()); 
        e.printStackTrace(); 
       } 
       // The code below plays a Simple Promo animation 

       for (int incr = 0; incr < 2; incr++) { 
        // Sleep for 1/2 second 
        // Invoke UI to change updating text to show 1 dot 
        // And Increasing the level to reduce the amount of clipping and 
        // slowly reveals the hand image 
        publishProgress(R.drawable.loading_full, 
          R.drawable.loading_empty, R.drawable.loading_empty, 
          R.drawable.loading_empty, R.drawable.loading_empty); 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         Log.d(TAG, "sleep failure"); 
        } 
        publishProgress(R.drawable.loading_full, 
          R.drawable.loading_full, R.drawable.loading_empty, 
          R.drawable.loading_empty, R.drawable.loading_empty); 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         Log.d(TAG, "sleep failure"); 
        } 
        publishProgress(R.drawable.loading_full, 
          R.drawable.loading_full, R.drawable.loading_full, 
          R.drawable.loading_empty, R.drawable.loading_empty); 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         Log.d(TAG, "sleep failure"); 
        } 
        publishProgress(R.drawable.loading_full, 
          R.drawable.loading_full, R.drawable.loading_full, 
          R.drawable.loading_full, R.drawable.loading_empty); 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         Log.d(TAG, "sleep failure"); 
        } 
        publishProgress(R.drawable.loading_full, 
          R.drawable.loading_full, R.drawable.loading_full, 
          R.drawable.loading_full, R.drawable.loading_full); 

        // Sleep for 1/2 second 
        try { 
         Thread.sleep(500); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         Log.d(TAG, "sleep failure"); 
        } 
       } 
       return stream; 
      } 

      /* 
      * Sends a query to server and gets back the parsed results in a bundle 
      * urlQueryString - URL for calling the webservice 
      */ 
      protected synchronized InputStream getQueryResults(String urlQueryString) 
        throws IOException, SAXException, SSLException, 
        SocketTimeoutException, Exception { 
       // HttpsURLConnection https = null; 


       HttpsURLConnection https = null; 
       String uri = urlQueryString; 

       URL urlo = new URL(uri); 

       try { 
        https = (HttpsURLConnection) urlo.openConnection(); 
        https.setConnectTimeout(20000); // 20 second timeout 
        https.setRequestProperty("Connection", "Keep-Alive"); 

        if ("gzip".equals(https.getContentEncoding())) { 
         stream = new GZIPInputStream(stream); 
        } else 
         stream = https.getInputStream(); 

       } catch (SSLException e) { 
        Log.e(LOG_TAG, e.toString()); 
        e.printStackTrace(); 

       } catch (SocketTimeoutException e) { 
        Log.e(LOG_TAG, e.toString()); 
        e.printStackTrace(); 
       } catch (IOException e) { 
        Log.e(LOG_TAG, e.toString()); 
        e.printStackTrace(); 

       } catch (Exception e) { 
        Log.e(LOG_TAG, e.toString()); 
        e.printStackTrace(); 

       } finally { 
        // https.disconnect(); 
       } 

       return stream; 
      } 

      @Override 
      protected void onProgressUpdate(Integer... progress) { 

       // Call function to update image view 

       setProgressImgView(progress[0], progress[1]); 

      } 

      @Override 
      protected void onPostExecute(InputStream stream) { 
       super.onPostExecute(stream); 
    // This method is called to parse the response and save the ArrayLists 
       success(); 

      } 

     } 

     private void setProgressImgView(Integer textViewId, Integer imageViewId) { 
      // update image view with the updating dots 
      // Reset view layout in case orientation while updating 
      //setContentView(R.layout.updating); 


     } 

     @Override 
     protected void onRestart() { 
      super.onRestart(); 

      if (mErrorAlert != null) 
       mErrorAlert.dismiss(); 
     } 


     public void success() { 

      // to parse the response 
      try { 
       handler.getQueryResponse(stream); 
      } catch (SAXException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      // to set method to save the ArryaLists from the parser 
      setArrayList(); 
      Intent i = new Intent(this, ConfigFinalActivity.class); 
      startActivity(i); 
      finish(); 

     } 
     // method to save the ArrayLists from parser 
       public static void setArrayList() { 
     //nameArr = handler.getnameArr(); 
     nameArr.addAll(handler.getnameArr()); 
     ApnArr = handler.getApnArr(); 
     mmscArr = handler.getMMSCArr(); 
     mmsproxyArr = handler.getMmscProxyArr(); 
     mmsportArr = handler.getMmsPortArr(); 
     proxyArr = handler.getMmscProxyArr(); 
     portArr = handler.getMmsPortArr(); 
     count = handler.getCount(); 
     System.out.println("testing123"); 
     System.out.println(nameArr); 

     } 
    } 

Handler Источник: (размещен на Google Docs - это превышает максимально допустимую для этого поста)

https://docs.google.com/document/d/1rosp9zM0RmFyBZVWaXaHJeLAITWiM2ziAU_JR9eNRzg/edit?usp=sharing

P.S.

Я получаю ошибку пустого указателя на линии:

String value = Values.get("name").toString(); 

LogCat:

08-07 21:30:24.510: E/AndroidRuntime(1998): FATAL EXCEPTION: main 
08-07 21:30:24.510: E/AndroidRuntime(1998): java.lang.NullPointerException 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at com.project.new.datasettings.ConfigFinalActivity.showNotification(ConfigFinalActivity.java:509) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at com.project.new.datasettings.ConfigFinalActivity.onClick(ConfigFinalActivity.java:620) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at android.view.View.performClick(View.java:4204) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at android.view.View$PerformClick.run(View.java:17355) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at android.os.Handler.handleCallback(Handler.java:725) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at android.os.Looper.loop(Looper.java:137) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
08-07 21:30:24.510: E/AndroidRuntime(1998):  at dalvik.system.NativeStart.main(Native Method) 
08-07 21:30:28.750: I/Process(1998): Sending signal. PID: 1998 SIG: 9 
+0

Что-нибудь действительно добавляется в nameArr? Я просмотрел ваш код несколько раз и действительно не вижу ссылки на эту переменную за пределами первоначальной декларации и в setArrayList() – CBredlow

+2

Прекратить использование большого количества глобальных переменных. Назовите свой материал чем-то значимым. Вы никогда не должны объявлять такие вещи, как NameArr, nameArr ... так далее. Кроме того, думаю, долго и упорно о том, почему вам нужно 10 различных глобальных ArrayLists, есть лучшее решение? Может быть, класс для инкапсуляции данных? – Grammin

ответ

6

It it appears it’s null at this point – any suggestions?

Нет, это не null. Это пустой список (size = 0).


Side Примечание: Имея переменную с именем nameArr и переменную с именем NameArr очень запутанным.

+0

Хорошо. Спасибо что подметил это! :) Любая идея, почему она кажется пустой (или что я могу сделать, чтобы ее разрешить?) – DroidZilla

+0

[снова] - Это НЕ отображается «пусто», появляется «[]» - пустой список. –

+0

@DroidZilla: обязательно, 'добавить()' некоторые элементы в ваш список перед его печатью. – jlordo

0

Вы должны изменить nameArr=handler.getnameArr(); к nameArr.addAll(handler.getnameArr());, чтобы добавить все результаты в списке массива

+0

Я попытался решить ваше решение (обновленный источник выше), но я все еще получаю 08-07 20: 32: 48.942: I/System.out (1371): [] в моем logcat – DroidZilla

+0

вам придется опубликовать код обработчика класс, то, что должно быть в массиве? – adefran83

+0

Я добавил его выше ... можно найти здесь: https://docs.google.com/document/d/1rosp9zM0RmFyBZVWaXaHJeLAITWiM2ziAU_JR9eNRzg/edit?usp=sharing – DroidZilla

0

Если значение nameArr было нулевым, System.out.println бы сказать, «нулевой», а не «[]» , Итак, у вас есть пустой список.

+0

Любая идея, почему она кажется пустой (или что я могу сделать, чтобы ее разрешить?) – DroidZilla

+0

Это НЕ отображается «пусто», появляется «[]» - пустой список. –

+0

Любая идея, как я могу решить эту проблему? – DroidZilla

1
nameArr.addAll(handler.getnameArr()); 

Это место, где вы добавляете этот Arraylist под названием «nameArr».

Возможно, проверка того, что возвращает handler.getnameArr(), может дать вам ключи. Обратите внимание, что он не возвращает null, он возвращает пустую коллекцию.

+0

Любая идея, почему она выглядит пустой (или что я могу сделать, чтобы ее разрешить?) – DroidZilla

+0

@DroidZilla: если вы проверите свой метод 'public ArrayList getnameArr() { System.out.println (" testing123 "); return nameArr; } 'Здесь вы фактически возвращаете тот же самый arraylist, который вы создали в верхней части, который пуст (то есть его просто инициализирован, но не содержит никаких элементов. Если вы назовете имяArr.add (" testing123 "), это будет добавить строковый элемент в этом ArrayList nameArr – user2506840

+0

общественного ArrayList getnameArr() { \t \t System.out.println ("тест");. \t \t System.out.println (nameArr); \t \t \t nameArr.add («test123»); \t \t return nameArr; Не похоже, чтобы устранить нулевую точку er issue - я все еще получаю нулевой указатель @ String value = Values.get («name»). toString(); – DroidZilla

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