【问题标题】:How to set a toast to java.net.UnknownHostException in android如何在android中为java.net.UnknownHostException设置吐司
【发布时间】:2017-08-15 10:02:20
【问题描述】:

在模拟器中,关闭互联网连接时出现错误:

java.net.UnknownHostException: 无法解析主机“URL”; 没有与主机名关联的地址。

但我想显示一个 Toast 而不是在单击登录按钮时显示我的托管 URL 以防止任何安全问题。请帮忙:)

public class NewLoginActivity extends AppCompatActivity implements View.OnClickListener {
  private EditText editTextUsername, editTextPassword;
  private Button buttonLogin;
  private ProgressDialog progressDialog;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_login);


    if (SharedPrefManager.getInstance(this).isLoggedIn()) {
      finish();
      startActivity(new Intent(this, AdminGMenuActivity.class));
      return;
    }

    editTextUsername = (EditText)findViewById(R.id.editTextUsername);
    editTextPassword = (EditText)findViewById(R.id.editTextPassword);
    buttonLogin = (Button)findViewById(R.id.buttonLogin);

    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Please wait...");

    buttonLogin.setOnClickListener(this);
  }

  private void userLogin() {
    final String username = editTextUsername.getText().toString().trim();
    final String password = editTextPassword.getText().toString().trim();

    progressDialog.show();

    StringRequest stringRequest = new StringRequest(
      Request.Method.POST,
      Constants.URL_LOGIN,
      new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
          progressDialog.dismiss();


          try {
            JSONObject obj = new JSONObject(response);
            if (!obj.getBoolean("error")) {
              SharedPrefManager.getInstance(getApplicationContext())
                .userLogin(
                  obj.getInt("id"),
                  obj.getString("username"),
                  obj.getString("email")
                );
              startActivity(new Intent(getApplicationContext(), AdminGMenuActivity.class));
              finish();
            }
            else {
              Toast.makeText(
                getApplicationContext(),
                obj.getString("message"),
                Toast.LENGTH_LONG
              ).show();
            }
          }

          catch (JSONException e) {
            e.printStackTrace();
          }
        }
      },
      new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
          progressDialog.dismiss();

          Toast.makeText(
            getApplicationContext(),
            error.getMessage(),
            Toast.LENGTH_LONG
          ).show();
        }
      }
    ) {
      @Override
      protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> params = new HashMap<>();
        params.put("username", username);
        params.put("password", password);
        return params;
      }
    };

    RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
  }


  @Override
  public void onClick(View view) {

    if (view == buttonLogin) {
      userLogin();
    }
  }
}

【问题讨论】:

  • 捕获抛出的异常,而不是打印它,让它显示Toast?
  • 感谢您的回复,先生,您能提供一下代码吗?
  • try { //logging in code } catch (UnknownHostException uhe) { Toast.makeText(this, "Couldn't connect to server!", Toast.LENGTH_LONG).show(); }
  • 先生,我刚刚这样做了,但出现以下错误 - 无法解析方法 'makeText(anonymous com.android.volley.Response.Listener, java.lang.String , int)'
  • 在你的Toast.makeText(),而不是thisNewLoginActivity.this

标签: java android android-studio


【解决方案1】:

使用 try-catch 块捕获异常

try {
    //your code for login goes here....
} catch (UnknownHostException e) {
    Toast.makeText(getApplicationContext(), "Unable to connect!", Toast.LENGTH_SHORT).show();
}

【讨论】:

  • 感谢您的回复。我现在收到此错误 Exception 'java.net.UnknownHostException' is never throw in the appropriate try block
  • 你可以用一般异常替换它,这样它就会捕获所有的eceptions。 try { //您的登录代码放在这里.... } catch (Exception e) { Toast.makeText(getApplicationContext(), "Unable to connect!", Toast.LENGTH_SHORT).show(); }
  • 上述错误已解决,点击登录按钮时应用仍然显示异常。
【解决方案2】:

非常感谢大家。只需注释掉里面的toast语句,错误就解决了。

             @Override
            public void onErrorResponse(VolleyError error) {
                    progressDialog.dismiss();

                    /*Toast.makeText(
                            getApplicationContext(),
                           error.getMessage(),
                            Toast.LENGTH_LONG
                    ).show();*/
                }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2013-10-21
    • 2012-02-28
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多