2

トーストに問題があります。ユーザーがデータベースに正常にログインしたときにトーストを非表示にするにはどうすればよいですか。

ユーザーがログインに失敗するためのコードは次のようになります。

class BuatLogin extends AsyncTask {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(Login_layout.this);
        pDialog.setMessage("Login_layout Progress...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }
    protected String doInBackground(String... args) {
        String usr = user.getText().toString();
        String pwd = pass.getText().toString();

        Log.d("1 "+usr, pwd);
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("usr", usr));
        params.add(new BasicNameValuePair("pwd", pwd));
        Log.d("2 "+usr, pwd);
        Log.d(usr,url_create_login);

        // getting JSON Object
        JSONObject json = jsonParser.makeHttpRequest(url_create_login,
                "POST", params);
        Log.d("Buat Respond", json.toString());
        try {
            int sukses = json.getInt(TAG_SUKSES);

            if (sukses == 1) {
                String nim=json.getString(TAG_NIM);
                String jrs=json.getString(TAG_JRS);
                Log.d(TAG_NIM,nim);

                // sukses login
                Intent i = new Intent(getApplicationContext(), Mhs_main_layout.class);
                i.putExtra(TAG_NIM, nim);
                i.putExtra(TAG_JRS,jrs);
                startActivity(i);
                finish();
            } else if(sukses == 2) {
                String nip=json.getString(TAG_NIP);
                Log.d(TAG_NIP,nip);
                Intent i = new Intent(getApplicationContext(), Admin_main_layout.class);
                i.putExtra(TAG_NIP, nip);
                startActivity(i);

                finish();
            }else if(sukses == 3){
                setResult(100);
                //toas(100);
                //finish();

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }


        return null;

    }

    //Respon dari upadte buku class
    protected void onPostExecute(String file_url) {
        pDialog.dismiss();
        int resultCode = 100;
        if (resultCode != 100); 
        {
         Toast.makeText(Login_layout.this, "Nip/Nim Atau Password TIdak Sesuai Silahkan Coba Lagi ", Toast.LENGTH_LONG).show();
        }
    }

}

しかし、ユーザーが正常にログインし、ログ猫にエラーがなくても、トーストが表示され続けます。消えるようにするにはどうすればよいですか?

4

2 に答える 2

0

スケルトン形式で行う必要があるのは次のとおりです。

int doInBackground(...) {
  blablabla...

  if (sukses == 1) {
     blablabla...
     // The value 1 will be returned to onPostExecute(int resultCode)
     // as the value for the parameter "resultCode":
     return 1; // or return sukses; same thing.
  } else if (sukses == 2) {
     blablabla...
     return 2; // or return sukses; same thing.
  } else {
     blablabla...
     return 3; // or return sukses; same thing.
  }
}

void onPostExecute(int resultCode) {
  // resultCode now contains the value returned by doInBackground():
  if (resultCode== 1) {
    Toast.makeText(Login_layout.this, "1", Toast.LENGTH_LONG).show();
    finish();
  } else if (resultCode== 2) {
    Toast.makeText(Login_layout.this, "2", Toast.LENGTH_LONG).show();
    finish();
  } else {
    Toast.makeText(Login_layout.this, "3", Toast.LENGTH_LONG).show();
  }
}

必要に応じて、このスケルトンを自由に完成させてください。トーストが投稿される前にスレッドがキャンセルされないようにするために、finish() への呼び出しを onPostExecute() に転送しましたが、Google を検索するか、独自のテストを行って、最善の方法を見つける必要があります。

于 2013-04-04T08:49:36.690 に答える
0

呼び出しsetResult(100);で変数resultCodeを 100 に設定すると、テストif (resultCode == 100)は常に true になるため、トーストは常に表示されます。

if (resultCode != 100)代わりにテストしないでよろしいですか?

于 2013-04-04T02:53:35.780 に答える