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();


    }
}