-1

我有两个活动:Mainpage.javaSecondary.java。我正在尝试从两个类访问相同的 php 文件。当第二个类被调用时,以下错误被撤销。

  java.lang.nullpointerexception.

我怎样才能消除这个错误?

这导致应用程序强制关闭。谢谢。这是第一类的代码: void login(){ try{

       httpclient=new DefaultHttpClient();

       httppost= new HttpPost("http://10.0.2.2/ABC/login.php"); 
       nameValuePairs = new ArrayList<NameValuePair>(2);
       nameValuePairs.add(new BasicNameValuePair("username",et.getText().toString().trim()));  
       nameValuePairs.add(new BasicNameValuePair("password",pass.getText().toString().trim()));
       nameValuePairs.add(new BasicNameValuePair("action","LOGIN"));

       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

       ResponseHandler<String> responseHandler = new BasicResponseHandler();
       response=httpclient.execute(httppost);
       final String response = httpclient.execute(httppost, responseHandler);
       System.out.println("Response : " + response);


               tv.setText("Response from PHP : " + response);

               if(response.equalsIgnoreCase("User Found"))
               {
                   Toast.makeText(Axdroid.this,"Login Success",Toast.LENGTH_SHORT).show();   

                   startActivity(new Intent(getApplicationContext(),Secondary.class));
               }                   else
               {
                    showAlert();     
               }                                     

       dialog.dismiss();   


   }catch(Exception e){

       System.out.println("Exception : " + e.getMessage());
   }

}

这对于二级类 void jsr(){

    try{
        httpclient = new DefaultHttpClient();
        httppost= new HttpPost("http://10.0.2.2/AndroidLeave/login.php");
        nameValuePairs.add(new BasicNameValuePair("action","SUMMARY"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));


        response = httpclient.execute(httppost);

        System.out.println(" ++++++++  +++++++++++++"+response);                    

        entity = response.getEntity();
        is = entity.getContent();
    }catch(Exception e){
        Log.e("log_tag", "Error in http connection"+e.toString());
    }

    System.out.println(" ++++++++ After getting data from PHP file +++++++++++++");

    //convert response to string
    try{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
        sb = new StringBuilder();
        sb.append(reader.readLine() + "\n");
        String line="0";

        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

        is.close();
        result=sb.toString();

    }catch(Exception e){
        Log.e("log_tag", "Error converting result "+e.toString());}
    }}

日志猫:

 10-26 18:10:01.313: W/SingleClientConnManager(2296): Make sure to release the connection before allocating another one.
 10-26 18:10:01.964: E/log_tag(2296): Error in http connectionjava.lang.NullPointerException
 10-26 18:10:01.974: E/log_tag(2296): Error converting result java.lang.NullPointerException
4

2 回答 2

0

发生错误是因为您尝试启动第二个连接,但您没有关闭第一个连接。由于您没有InputStream在第一堂课中使用 and ,因此您没有像在第二堂课中那样调用is.close().

我不太明白为什么在第一堂课中,您两次调用execute().

你可以这样做:删除这两行

ResponseHandler<String> responseHandler = new BasicResponseHandler();
final String response = httpclient.execute(httppost, responseHandler);

在这条线之后

response=httpclient.execute(httppost);

添加:

final String responseString = EntityUtils.toString(response.getEntity());

然后使用responseString你曾经使用过的地方response作为String. 如果它仍然发生,请在之后添加 EntityUtils.consume(response.getEntity()); 应该也做消耗,但toString以防万一。

如果它仍然不起作用,请告诉我。

于 2012-10-26T14:00:50.700 回答
0

Just quickly looking at your code, the exception is probably occurring on this line in the second class:

nameValuePairs.add(new BasicNameValuePair("action","SUMMARY"));

because nameValuePairs is null. You might try adding something like:

nameValuePairs = new ArrayList<NameValuePair>(2);

before you try calling nameValuePairs.add()

于 2012-10-26T14:01:54.603 回答