0

仕事で内部 Web サーバーと通信するアプリを構築しています。これにはログイン プロセスがあります。

問題は、機能する実際の URL を使用すると、MalformedURLException が発生することです。また、アプリでアドレスに http:// を使用すると、エラーが発生します。

com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream@42c06aa0

Firefox や Chrome などのブラウザでアドレスに http:// を追加すると、サイトはそれ自体にリダイレクトされますが、http:// はありません。「http://」部分で動作しないように設計されていると思いますが、これを回避する方法がわかりません。

HttpUrlConnection の使用について数時間検索しましたが、URL にはプロトコルが必要であることがわかりました。

プライバシー上の理由から、実際の URL を "MyServerName","MyOrgName" に置き換えました。

public class DoLogin extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {



        Bundle extras = getIntent().getExtras();
        String username = extras.getString("Username");
        String password = extras.getString("Password");
        String charset = "UTF-8";
        String pageText = "";
        try {
            URL url = new URL("http://MyServerName.MyOrgName.k12.mo.us/service/login.asp?ucode=" + username + "&upassword=" + password);
            //URL url = new URL("http://www.google.com/");
            URLConnection connection = url.openConnection();
            connection.setRequestProperty("Accept-Charset", charset);
            InputStream response = connection.getInputStream();
            pageText = response.toString();

        } catch (MalformedURLException e) {
            //Do something with the exception.
            pageText = "MalformedURLException " + e.getMessage();
        } catch (IOException e2) {
            //Do something with the exception.
            pageText = "IOException " + e2.getMessage();
        } catch (NullPointerException e3) {
            pageText = "NullPointerException " + e3.getMessage();
        }
        setData(pageText);
        return null;

    }
}

私の質問は、「HTTP://」なしでこのような URL を使用するにはどうすればよいか、「HTTP://」を使用できるようにサイトまたは DNS を変更するにはどうすればよいか、それとも何か問題があるのでしょうか。コード?

可能であれば、いくつかの可能性を提示したいと思います。

ありがとう、ウェイン

4

1 に答える 1

0

サイトが "http://" 部分のない URL にリダイレクトされたとしても、これは問題ではないことがわかりました。

実際の問題は、Web サーバーによって提供されるページを読み取ろうとしていた方法と、intent.extra 値を正しく渡していないことでした。

ここに作業コードがあります。現在、デバッグ用のものがありますが、他の誰かがそれによって助けられることを願っています.

public class DoLogin extends AsyncTask<Void, Void, String> {
    protected void onPostExecute(String result) {
        PostLoginStatus(result);
    }
    protected String doInBackground(Void... params) {
        String username = "No Username passed.";
        String password = "No Password passed.";
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            username = extras.getString("Username");
            password = extras.getString("Password");
        }
        String charset = "UTF-8";
        String pageText = "";
        try {
            URL url = new URL("http://MyServer.MyOrg.k12.mo.us/service/login.asp?ucode=" + username + "&upassword=" + password);
            URLConnection connection = url.openConnection();
            // wrap the urlconnection in a bufferedreader
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

            String line;

            // read from the urlconnection via the bufferedreader
            while ((line = bufferedReader.readLine()) != null)
            {
                pageText = pageText + line + "\n";
            }
            bufferedReader.close();

        } catch (MalformedURLException e) {
           pageText = "Username: " + username + " Password: " + password + "MalformedURLException " + e.getMessage();
        } catch (IOException e2) {
           pageText = "Username: " + username + " Password: " + password + " IOException " + e2.getMessage();
        } catch (NullPointerException e3) {
           pageText = "Username: " + username + " Password: " + password + " NullPointerException " + e3.getMessage();
        }
        return pageText;
    }
}

前のアクティビティでインテント エクストラを追加した方法は次のとおりです。

String username = eusername.getText().toString().trim();
String password = epassword.getText().toString().trim();
Intent i = new Intent(Login.this, VerifyInventory.class);
// Where 'login' would be the current activity's name and 'VerifyInventory' is the next activity's name.
i.putExtra("Username", username);
i.putExtra("Password", password);
startActivity(i);
于 2016-05-03T19:24:05.287 に答える