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