簡體   English   中英

Android()上的Null指針異常

[英]Null pointer exception on create() Android

我有一種方法可以用來接收一些信息。 我向該方法發送一個字符串(服務器方向),以及兩個包含用戶和密碼的字符串,並且我收到了一個包含所有信息的String [],但是我有一個NullPointerException

values = request("http://myIp/XXX/post.php?request=1", user, password);

線。 完整的代碼如下:

String[] values;

@SuppressLint("InlinedApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);
    setContentView(R.layout.activity_select_environment);   

    myBundle = getIntent().getExtras();

    user = myBundle.getString("user");
    password = myBundle.getString("password");

    values = request("http://myIp/XXX/post.php?request=1", user, password);  

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, android.R.id.text1, values);
}

該方法是下一個:

@SuppressWarnings("null")
public String[] request(String requesturl, String user, String password)
{
    String result[] = null; 

    try
    {
        HttpClient httpclient = new DefaultHttpClient(); 

        HttpPost httppost = new HttpPost(requesturl);

        String results = "";

        //Varibles POST
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("user", user));
        nameValuePairs.add(new BasicNameValuePair("password", password));                        

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        //Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
        response.getAllHeaders();
        response.getEntity();
        result[0] = "";                                                                         
        if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
        {
            results = EntityUtils.toString(response.getEntity());           
            if(!results.equals("-1"))
            {
                JSONObject jsonResponse = new JSONObject(results);

                JSONArray jsonMainNode = jsonResponse.optJSONArray("edificios");

                int lengthJsonArr =jsonMainNode.length();
                for(int i = 0; i < lengthJsonArr; i++)
                {
                    JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);   
                    result[i] = jsonChildNode.optString("nombre"); 
                }
            }                 
        }

        return result;
    }
    catch(Exception ex)
    {
        result[0] = "error";
        return result;
    }
}  

我在“ values = request(” ....“);”上收到NullPointerException 行,我不知道為什么,因為用戶名和密碼都有值,而另一個值是字符串...該怎么辦?

您已經聲明了result String數組,但尚未初始化它。

嘗試這個:

@SuppressWarnings("null")
public String[] request(String requesturl, String user, String password)
{
    String result[] = new String[ <Insert value> ];
    // Code...
}

讓我進一步解釋以避免投票不足。 這就是為什么我這樣認為:

您首先將數組初始化為null,因此尚無法使用。 在此行的最下方,您可以看到以下語句String results = ""但您的數組仍為null 然后,您要執行此result[0] = "" ,親愛的。 我認為那是nullPointerException來源。

您必須初始化數組,如果您說需要先了解數組的大小,那是對的。 使用您期望的最大值作為大小,或者最好使用list而不是array

這是list結構的一個很好的來源: Android Development中的List

還有約一個很好的討論listarrays 在這里 ,它是C#,但原則仍然或多或少相同。

You got the exception because you are trying to access the first element of the , which is not even initialized.

因此,您需要先初始化數組,然后再使用它

result = new String[<some size>];

如果事先不知道數組的大小,則可以使用ArrayList

ArrayList<String> result = new ArrayList<>();

用法

result.add(<some string value>);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM