Java create()上出现空指针异常

Java create()上出现空指针异常,java,android,json,nullpointerexception,apache-commons-httpclient,Java,Android,Json,Nullpointerexception,Apache Commons Httpclient,我有一个方法,我用它来接收一些信息。我向这个方法发送一个字符串(服务器方向)和两个包含用户和密码的字符串,并收到一个包含所有信息的字符串[],但在 values = request("http://myIp/XXX/post.php?request=1", user, password); 线路。完整的代码如下所示: String[] values; @SuppressLint("InlinedApi") @Override protected void onCreate(Bundle sa

我有一个方法,我用它来接收一些信息。我向这个方法发送一个字符串(服务器方向)和两个包含用户和密码的字符串,并收到一个包含所有信息的字符串[],但在

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;
    }
}  
String[]值;
@SuppressLint(“InlinedApi”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
此.setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u USER\u LANDSCAPE);
setContentView(R.layout.activity\u select\u environment);
myBundle=getIntent().getExtras();
user=myBundle.getString(“用户”);
password=myBundle.getString(“密码”);
值=请求(“http://myIp/XXX/post.php?request=1“,用户,密码);
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u expandable\u list\u item\u 1,android.R.id.text1,值);
}
方法如下:

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;
    }
}  
@SuppressWarnings(“空”)
公共字符串[]请求(字符串请求URL、字符串用户、字符串密码)
{
字符串结果[]=null;
尝试
{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(请求URL);
字符串结果=”;
//可变桩
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“用户”,user));
添加(新的BasicNameValuePair(“密码”,password));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
response.getAllHeaders();
response.getEntity();
结果[0]=“”;
if(response.getStatusLine().getStatusCode()==HttpStatus.SC\u OK)
{
结果=EntityUtils.toString(response.getEntity());
如果(!results.equals(“-1”))
{
JSONObject jsonResponse=新的JSONObject(结果);
JSONArray jsonMainNode=jsonResponse.optJSONArray(“大厦”);
int lengthJsonArr=jsonMainNode.length();
for(int i=0;i

我在“values=request(“..”);”行收到一个NullPointerException,我不知道为什么,因为user和password都有值,而另一个值是字符串。。。可以做什么?

您已经声明了
结果
字符串数组,但没有初始化它

试试这个:

@SuppressWarnings("null")
public String[] request(String requesturl, String user, String password)
{
    String result[] = new String[ <Insert value> ];
    // Code...
}
@SuppressWarnings(“空”)
公共字符串[]请求(字符串请求URL、字符串用户、字符串密码)
{
字符串结果[]=新字符串[];
//代码。。。
}
让我进一步解释,以避免投反对票。这就是为什么我认为:

首先将数组初始化为null,因此它还不能使用。再往下一行,您有一条语句
stringresults=“”
,但您的数组仍然是
null
。然后你做这个
结果[0]=”
,哦,亲爱的。我想这就是
nullPointerException
的来源

你必须初始化你的数组,如果你说你需要预先知道数组的大小,你是对的。使用大小的最大值,或者最好使用
列表
,而不是
数组

下面是
列表
数据结构的一个很好的源代码:


关于
列表
数组
的比较,也有一个很好的讨论,它是针对C的,但原则大致相同。

您已经声明了
结果
字符串数组,但没有初始化它

试试这个:

@SuppressWarnings("null")
public String[] request(String requesturl, String user, String password)
{
    String result[] = new String[ <Insert value> ];
    // Code...
}
@SuppressWarnings(“空”)
公共字符串[]请求(字符串请求URL、字符串用户、字符串密码)
{
字符串结果[]=新字符串[];
//代码。。。
}
让我进一步解释,以避免投反对票。这就是为什么我认为:

首先将数组初始化为null,因此它还不能使用。再往下一行,您有一条语句
stringresults=“”
,但您的数组仍然是
null
。然后你做这个
结果[0]=”
,哦,亲爱的。我想这就是
nullPointerException
的来源

你必须初始化你的数组,如果你说你需要预先知道数组的大小,你是对的。使用大小的最大值,或者最好使用
列表
,而不是
数组

下面是
列表
数据结构的一个很好的源代码:


关于<代码>列表<代码>与<代码>数组<代码>的比较,也有一个很好的讨论,它是针对C的,但原则基本上是一样的。

您遇到了异常,因为您试图访问<代码>结果<代码>的第一个元素,而该元素甚至没有初始化。

因此,您需要先初始化数组,然后使用它

result = new String[<some size>];
用法

result.add();

出现异常是因为您试图访问结果
的第一个元素,该元素甚至没有初始化。

因此,您需要先初始化数组,然后使用它

result = new String[<some size>];
用法

result.add();
@SuppressWarnings(“null”)
表示您已决定忽略有关问题的编译器警告。删除该选项并修复问题。提示:
结果
未初始化。您不应该捕获异常,至少在没有日志记录/重新抛出的情况下是这样。我现在放了日志猫,谢谢