3

aspで作成されたWebサイトへのログインに問題があります...使用しているコードは次のとおりです。

public class MainActivity extends Activity {
Button bottone;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bottone = (Button) findViewById(R.id.button1);
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = 
                    new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            }
        bottone.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // starting new Async Task
                try {
                    login();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    public static void login() throws IOException
    {
        String loginurl = "https://www.blurum.it/Web/", user, pass;
        user = "tester55";
        pass = "provapassword321";

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(loginurl);

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
        nameValuePairs.add(new BasicNameValuePair("ctrl_LoginControl$loginView$c01$RPLogin$LoginView$Username", user));
        nameValuePairs.add(new BasicNameValuePair("ctrl_LoginControl$loginView$c01$RPLogin$LoginView$Password", pass));
        nameValuePairs.add(new BasicNameValuePair("remember", "on"));
        nameValuePairs.add(new BasicNameValuePair("ctrl_LoginControl$loginView$c01$RPLogin$LoginView$LoginButton", "Accedi"));



        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request 
        HttpResponse response = httpClient.execute(httpPost);
        Log.d("logggd", "response stat code " + response.getStatusLine().getStatusCode());

        if (response.getStatusLine().getStatusCode() < 400) {

            String cookie = response.getFirstHeader("Cookie")
                    .getValue();
            Log.d("logggdc", "cookie: " + cookie);

            // get the contacts page 
            HttpGet getContacts = new HttpGet("https://www.blurum.it/Web/default.aspx");
            getContacts.setHeader("Cookie", cookie);
            response = httpClient.execute(getContacts);

            InputStream ins = response.getEntity().getContent();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    ins));

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                Log.d("logggd1", " " + inputLine);
            }

            in.close();
        } else {
                Log.d("logggd2", "Response error: "
                        + response.getStatusLine().getStatusCode());
            }
        }
    }

しかし、私のアプリケーションがクラッシュしたので、コードでエラーを見つけることができません...これがlogcatです:

    11-12 20:05:37.678: W/dalvikvm(1806): threadid=1: thread exiting with uncaught exception (group=0xb4177180)
11-12 20:05:37.688: E/AndroidRuntime(1806): FATAL EXCEPTION: main
11-12 20:05:37.688: E/AndroidRuntime(1806): java.lang.NullPointerException
11-12 20:05:37.688: E/AndroidRuntime(1806):     at com.example.testlogin.MainActivity.login(MainActivity.java:93)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at com.example.testlogin.MainActivity$1.onClick(MainActivity.java:53)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at android.view.View.performClick(View.java:3511)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at android.view.View$PerformClick.run(View.java:14105)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at android.os.Handler.handleCallback(Handler.java:605)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at android.os.Looper.loop(Looper.java:137)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at android.app.ActivityThread.main(ActivityThread.java:4424)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at java.lang.reflect.Method.invokeNative(Native Method)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at java.lang.reflect.Method.invoke(Method.java:511)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-12 20:05:37.688: E/AndroidRuntime(1806):     at dalvik.system.NativeStart.main(Native Method)
11-12 20:05:38.218: I/dalvikvm(1806): threadid=3: reacting to signal 3
11-12 20:05:38.228: I/dalvikvm(1806): Wrote stack traces to '/data/anr/traces.txt'

投稿されたデータをFirefoxのサーバーに改ざんデータで抽出しました。これが画面です。ログインは2つの投稿に分かれていると思います。画面は次のとおりです。http: //i.stack.imgur.com/GZiZ0.png http ://i.stack.imgur.com/FKH3P.png

最初のページまたは2番目の投稿データを送信する必要があるかどうかわかりませんが、これはエラーである可能性がありますか?ありがとう。

4

2 に答える 2

1

response.getFirstHeader("Cookie")戻ってきているよう ですnull

javadocによる

このメッセージの指定された名前を持つ最初のヘッダーを返します。ヘッダー値は無視されます。メッセージに一致するヘッダーが複数ある場合は、getHeaders(String)の最初の要素が返されます。メッセージに一致するヘッダーがない場合、nullが返されます

解決:

null電話をかける前に確認してくださいgetValue();

例:

String cookie = null;
if(response.getFirstHeader("Cookie") != null)
{
cookie = response.getFirstHeader("Cookie")
                    .getValue();
}
于 2012-11-12T20:53:20.340 に答える
1

コードブロックで以下の行を複数回呼び出すことはできません。

response.getStatusLine()

あなたはこのように見えるあなたの行でそれを複数回呼んでいます。

Log.d("logggd", "response stat code " + response.getStatusLine().getStatusCode());

そして、あなたはこの行で再びそれを呼んでいます。

if (response.getStatusLine().getStatusCode() < 400) {

の最初の呼び出しをコメントアウトしresponse.getStatusLine()ます-それはあなたがステータスコードを記録しようとしているところです。したがって、コードは次のようになります。

//Log.d("logggd", "response stat code " + response.getStatusLine().getStatusCode());

login()また、;と呼ばれるメソッドのどこかでこれを実行してみてください。

    // Execute HTTP Post Request 
    HttpResponse response = httpClient.execute(httpPost);
    StatusLine statusLine = response.getStatusLine();

    Log.d("logggd", "response stat code " + statusLine.getStatusCode());


    if (statusLine.getStatusCode() < 400) {

         String cookie = null;
          if(response.getFirstHeader("Cookie") != null){
                 cookie = response.getFirstHeader("Cookie").getValue();
          }
          Log.d("logggdc", "cookie: " + cookie);

    //...etc....etc...etc
于 2012-11-12T20:56:32.267 に答える