-1

我在以下源代码中得到了 nameArr 的空值,但我不知道为什么。

当我尝试使用以下内容时:

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);

        }
    }

处理程序来源:(托管在谷歌文档上 - 它超出了这篇文章的字符限制)

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

附言

我在行上收到一个空指针错误:

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

日志猫:

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
4

4 回答 4

7

在这一点上它似乎是空的——有什么建议吗?

不,不是null。它是一个空列表(大小 = 0)。


旁注:命名变量nameArr和命名变量NameArr非常令人困惑。

于 2013-08-07T20:03:51.497 回答
1
nameArr.addAll(handler.getnameArr());

这是您要添加到名为“nameArr”的 Arraylist 的位置。

也许检查handler.getnameArr()返回的内容可能会为您提供线索。请注意,它不返回 null ,而是返回一个空集合。

于 2013-08-07T21:09:50.793 回答
0

您必须更改nameArr=handler.getnameArr();nameArr.addAll(handler.getnameArr());才能将所有结果添加到数组列表中

于 2013-08-07T20:06:23.633 回答
0

如果 nameArr 的值为 null,System.out.println 会说“null”,而不是“[]”。所以你有一个空列表。

于 2013-08-07T20:06:24.090 回答