我有一个用来接收一些信息的方法。我向此方法发送一个字符串(服务器方向)和两个包含用户和密码的字符串,我收到一个包含所有信息的 String[],但我在
处出现 NullPointerExceptionvalues = 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/