java - Android create() 上的空指针异常

标签 java android json nullpointerexception apache-commons-httpclient

我有一个用来接收一些信息的方法。我向此方法发送一个字符串(服务器方向)和两个包含用户和密码的字符串,我收到一个包含所有信息的 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 字符串数组,但未初始化它。

试试这个:

@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 数据结构的一个很好的来源:List in Android Development .

还有关于列表数组的精彩讨论here ,它适用于 C#,但原理或多或少保持相同。

关于java - Android create() 上的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761936/

相关文章:

java - 错误无法找到或加载主类测试(Java)

android - 使用 repo 命令回滚?

更新到 2.3 后,Android Studio 不会生成签名的 apk

java - 从其他合法的 json 中剥离类似 C 的注释

java - 使应用程序计算自第一次使用以来的时间

java - android sax xml 解析多个父级

java - 向所有其他方法调用返回的整数

java - Android Studio 中的 LogCat 错误导致应用程序运行时崩溃

java - Volley 请求总是得到错误监听器

json - `additionalProperties` JSON 架构中的规则未应用于嵌套级别属性