0

LoginAuthenticate以下のコードを実行しているときに、ストリームを閉じているときに、try ブロックのクラスで NullPointerException を取得しています。

私は AsyncTask を使用してonClickおり、ボタンからアクティブにしています。

onClick私はログイン認証を呼び出しており、試行ブロックで例外を取得しています 。

public class DattabActivity extends Activity implements View.OnClickListener {
    /** Called when the activity is first created. */    
    private final static String SERVICE_URI = "http://182.50.154.23/Dattab.Device.Rest/ServiceClass/RestDeviceService.svc";

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v("DEBUG", "DattabActivity");        
        setContentView(R.layout.login);
        Button loginbutton=(Button)findViewById(R.id.loginbtn);
        loginbutton.setOnClickListener(this);

        Intent available=new Intent();
        available.setClass(DattabActivity.this, Available_Surveys.class);         

    }

    public void onClick(View v) {
        switch(v.getId()){

        case R.id.loginbtn:
            // TODO Auto-generated method stub
            EditText userid = (EditText)findViewById(R.id.useredt);
            EditText passwd = (EditText)findViewById(R.id.pwdedt);

            Log.i("DEBUG", "DattabActivity Click Button ");

            userid.setText("surveyor1");
            passwd.setText("dev");
            if(userid.getText().toString()=="" ||passwd.getText().toString()==""){

                Toast.makeText(getApplicationContext(), "Please enter your account details", Toast.LENGTH_LONG).show();
            }
            else{
                    String params = SERVICE_URI + "/authenticateuser/"+userid.getText().toString()+"/"+passwd.getText().toString();
                    try {
                            LoginAuthenticate la = new LoginAuthenticate();
                            la.execute(params);
                            la.get();


                        JSONObject json = new JSONObject(new String(la.getStreamBuffer()));
                        Intent available=new Intent();
                        available.setClass(DattabActivity.this, Available_Surveys.class);
                        available.putExtra("userid", json.getString("SurveyorId"));
                        startActivity(available);
                        Toast.makeText(getApplicationContext(), json.getString("SurveyorId"),Toast.LENGTH_LONG).show();
                        Toast.makeText(getApplicationContext(), "Login Clicked", Toast.LENGTH_LONG).show();
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    catch(Exception e){
                        e.printStackTrace();
                    }



            }

            break ;
        }

    }
    private class LoginAuthenticate extends AsyncTask<String,Integer,char[]> {
        private char[] streamBuffer ;
        @Override
        protected char[] doInBackground(String... params) {
            android.os.Debug.waitForDebugger();

            String url=params[0];
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet request = new HttpGet(url);
            try {
                    request.setHeader("Accept", "application/json");
                    request.setHeader("Content-type", "application/json");
                    HttpResponse response = httpClient.execute(request);
                    HttpEntity responseEntity = response.getEntity();

                    // Read response data into buffer
                    char[] buffer = new char[(int)responseEntity.getContentLength()];
                    InputStream stream = responseEntity.getContent();
                    InputStreamReader reader = new InputStreamReader(stream);
                    reader.read(buffer);
                    stream.close();//here it goes in catch NULL Pointer
                    return buffer ;

            }catch(Exception e){
                e.printStackTrace();
                return null;
            }

        }
        protected void onPostExecute(char[] result){
            streamBuffer = result ;
        }

        public char[] getStreamBuffer(){
            return streamBuffer ;
        }
    }
}
4

2 に答える 2

0

null 例外エラーを処理するには、これを試してください。

        try {
                request.setHeader("Accept", "application/json");
                request.setHeader("Content-type", "application/json");
                HttpResponse response = httpClient.execute(request);
                HttpEntity responseEntity = response.getEntity();

                // Read response data into buffer
                char[] buffer = new char[(int)responseEntity.getContentLength()];
                try{
                      InputStream stream = responseEntity.getContent();
                       InputStreamReader reader = new InputStreamReader(stream);
                        reader.read(buffer);
                 }
                 finally{
                       stream.close();//here it goes in catch NULL Pointer
                  }
                return buffer ;

        }catch(Exception e){
            e.printStackTrace();
            return null;
        }

リンク: https://stackoverflow.com/a/156889/1503155

于 2012-08-02T07:37:33.840 に答える
0

HTTP が null ポインター例外を返す理由は多数あります。インターネットが機能していません。アクセスしている URL は存在しないか、存在しません。あなたのtry catchブロックでは、例外を引き起こしている何か間違ったことをしており、catchブロックはすべての例外をキャッチし、常にnullポインターを返します。

エミュレーターでテストしていて、URL が正しく、コードに問題がないことが確実な場合は、インターネット接続を無効化/有効化し、プロジェクトをクリーンアップして再構築し、エミュレーターを再起動できます。エミュレーターのインターネットの問題を修正する場合があります。

于 2012-08-02T09:17:47.437 に答える