Android 简单HttpPost上的NullPointerException
如果用户名和密码正确,则必须显示“成功”,否则必须显示“失败”。我正在使用Android 简单HttpPost上的NullPointerException,android,http-post,httprequest,getjson,httpexception,Android,Http Post,Httprequest,Getjson,Httpexception,如果用户名和密码正确,则必须显示“成功”,否则必须显示“失败”。我正在使用BasicNameValuePair连接到服务器。并且它在这一行上显示NullPointerExceptionint code=pres.getStatusLine().getStatusCode() 公共类MyPostActivity扩展活动{ 默认HttpClient客户端; HttpPost; HttpResponse; httpent实体; 按钮b; 列表对; @凌驾 创建时的公共void(Bundle saved
BasicNameValuePair
连接到服务器。并且它在这一行上显示NullPointerException
int code=pres.getStatusLine().getStatusCode()代码>
公共类MyPostActivity扩展活动{
默认HttpClient客户端;
HttpPost;
HttpResponse;
httpent实体;
按钮b;
列表对;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
b=(按钮)findViewById(R.id.button1);
client=新的DefaultHttpClient();
post=新的HttpPost(
"http://somesite.com/abc");
b、 setOnClickListener(新视图。OnClickListener(){
公共void onClick(视图v){
列表对=新的ArrayList(3);
添加(新的BasicNameValuePair(“电子邮件”、“avinash”);
添加(新的BasicNameValuePair(“密码”、“avinash2”);
试一试{
setEntity(新的UrlEncodedFormEntity(对));
}捕获(不支持的编码异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
HttpResponse pres=null;
试一试{
pres=客户端执行(post);
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
int code=pres.getStatusLine().getStatusCode();
如果(代码==200){
Toast.makeText(getApplicationContext(),“成功”,
吐司。长度(短)。show();
}否则{
Toast.makeText(getApplicationContext(),“失败!”,
吐司。长度(短)。show();
}
}
});
}
}
您应该将internet权限添加到AndroidManifest.xml
文件中。另外,您不应该在UI线程上执行阻塞操作。事实上,httpexecute
将导致UI线程挂起,等待服务器的响应。这将导致ANR(应用程序无响应)。我建议你阅读以下内容
发生空指针异常是因为您的客户机中可能会出现异常。执行行并注意它(您只需捕获它)。这就是为什么pres
为空。您应该打印异常以查找真正的问题。请将此权限也添加到您的清单中,然后重试
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
和异步任务代码
private class SignInService extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
try {
progressDilaog = ProgressDialog.show(MainActivity.this, "",
"Loading", true, false);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected Void doInBackground(Void... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("username", "abc"));
nameValuePairs.add(new BasicNameValuePair("password", "bcd"));
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
try {
HttpResponse response = httpclient.execute(httppost);
int responsecode = response.getStatusLine().getStatusCode();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progressDilaog.dismiss();
}
}
私有类签名服务扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
试一试{
progressDilaog=ProgressDialog.show(MainActivity.this,“,
“加载”,正确,错误);
}捕获(例外e){
e、 printStackTrace();
}
}
@凌驾
受保护的Void doInBackground(Void…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
List nameValuePairs=新的ArrayList(5);
添加(新的BasicNameValuePair(“用户名”、“abc”));
添加(新的BasicNameValuePair(“密码”、“bcd”);
试一试{
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
试一试{
HttpResponse response=httpclient.execute(httppost);
int responsecode=response.getStatusLine().getStatusCode();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
进行,进行;进行;进行;
}
}
Put web服务文件也请共享日志。。。检查您是否在调用execute
您的web服务代码时收到任何异常情况您是否具有internet权限?向我们显示您的清单文件。。您需要在清单中添加internet权限,才能从应用程序访问internet。。此外,您不应在UI线程上进行网络调用,请使用AsyncTask
如何打印异常??到目前为止没有错误。。。而且它没有显示祝酒词int responsecode=response.getStatusLine().getStatusCode();如果(responsecode==200){Toast.makeText(getApplicationContext(),“Success”,Toast.LENGTH_SHORT).show()}或者{Toast.makeText(getApplicationContext(),“Failed.”,Toast.LENGTH_SHORT.show();}
则不能在doInBackground中使用Toast。如果要调试,请使用Log.d()。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
private class SignInService extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
try {
progressDilaog = ProgressDialog.show(MainActivity.this, "",
"Loading", true, false);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected Void doInBackground(Void... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5);
nameValuePairs.add(new BasicNameValuePair("username", "abc"));
nameValuePairs.add(new BasicNameValuePair("password", "bcd"));
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
try {
HttpResponse response = httpclient.execute(httppost);
int responsecode = response.getStatusLine().getStatusCode();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progressDilaog.dismiss();
}
}