2

ユーザー名とパスワードが正しい場合は、「成功」と表示される必要があります。それ以外の場合は「失敗」と表示されますBasicNameValuePair。そして、NullPointerExceptionこの行に表示されますint code = pres.getStatusLine().getStatusCode();

public class MyPostActivity extends Activity {
    DefaultHttpClient client;
    HttpPost post;
    HttpResponse res;
    HttpEntity ent;
    Button b;
    List<NameValuePair> pairs;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        b = (Button) findViewById(R.id.button1);
        client = new DefaultHttpClient();
        post = new HttpPost(
                "http://somesite.com/abc");
        b.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                List<NameValuePair> pairs = new ArrayList<NameValuePair>(3);
                pairs.add(new BasicNameValuePair("Email", "avinash"));
                pairs.add(new BasicNameValuePair("password", "avinash2"));

                try {
                    post.setEntity(new UrlEncodedFormEntity(pairs));
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                HttpResponse pres = null;
                try {
                    pres = client.execute(post);
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                int code = pres.getStatusLine().getStatusCode();
                if (code == 200) {
                    Toast.makeText(getApplicationContext(), "Successful",
                            Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), "Failed!",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

}

ここに画像の説明を入力

4

3 に答える 3

4

ファイルにインターネット許可を追加する必要がありAndroidManifest.xmlます。また、 に対してブロッキング操作を実行しないでくださいUI Thread。実際には、がサーバーからの応答を待ってハングHttp executeする原因となります。UI Threadこれにより、ANR(アプリケーションが応答しない) が発生します。次の記事を読むことをお勧めします

于 2013-03-26T11:24:50.540 に答える
1

この権限をマニフェストにも追加して試してください

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>

そして AsyncTask コード

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


    }
}
于 2013-03-26T11:33:20.257 に答える
0
        try {
            pres = client.execute(post);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        int code = pres.getStatusLine().getStatusCode();

ヌルポインタ例外が発生するのは、おそらくclient.execute行で例外が発生し、それについて注意していないためです(キャッチするだけです)。presそれがnullである理由です。実際の問題を見つけるには、例外を出力する必要があります。

于 2013-03-26T11:25:58.777 に答える