-2

我的问题是,如果用户无法登录数据库,我正在准备吐司,但即使用户成功登录我的数据库,吐司仍然出现 Login_layout

 class BuatLogin extends AsyncTask<String,  String , String> {

    /**
     * Sebelum memasuki menu buat progres dialog
     * */
    @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();
    }
    /**
     * Konkesi
     * */
    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
      // login url menerima POST method
      JSONObject json = jsonParser.makeHttpRequest(url_create_login,
                                                   "POST", params);

      // cek log untuk response
      Log.d("Buat Respond", json.toString());

      // check untuk sukses tag
      try {
        int sukses = json.getInt(TAG_SUKSES);

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

          // sukses login
          Intent i = new Intent(getApplicationContext(), Mhs_main_layout.class);
          i.putExtra(TAG_NIM, nim);
          startActivity(i);

          // tutup layar
          finish();
        } else if(sukses == 2) {
          String nim=json.getString(TAG_NIM);
          Log.d(TAG_NIM,nim);
          Intent i = new Intent(getApplicationContext(), Admin_main_layout.class);
          i.putExtra(TAG_NIM, nim);
          startActivity(i);

          // tutup layar ini
          finish();
        }else if(sukses == 3){

             setResult(100);


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

      return null;     
    }   

  }


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

  }

} }

4

2 回答 2

0

很难理解你想要实现什么、何时以及如何实现。无论如何,那里return null"看起来非常糟糕。

您应该返回一些有用的信息来发布执行。也许你可以在那里检查结果是否是预期的。

函数永远不应返回“随机”结果。您应该尝试重新学习一些 OOP 和/或 java。您肯定会返回一个“null”,并且您将该函数编程为返回一个String.

说完之后... 您应该编写代码来生成 Toast 消息,onPostExecute因为它可以访问视图。

编辑 logcat 在这一行中说错误Toast.makeText(Login_layout.this...吗?我不确定它是否写得好。Some1请评论它,但我认为你应该写v.getContext()而不是Login_layout.this

于 2013-03-17T22:47:03.057 回答
0

您可以使用该onProgressUpdate(Progress...values)方法,该方法完全符合您的要求。在doInBackground(), 打电话publishProgress(Progress...values)并在Toast那里。

顺便说一句:请考虑阅读有关代码质量、面向对象编程的书籍,并在阅读时阅读 Android API 文档。

编辑/添加

基础 AsyncTask 概述(请记住,您是Thread用开始一个新任务AsyncTask

public class Operation extends AsyncTask<ParamA, ParamB, ParamC> {
    @Override
    protected ParamC doInBackground(ParamA... params) {
        return new ParamC();
    }      

    @Override
    protected void onPostExecute(ParamC result) {

    }

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected void onProgressUpdate(ParamB... values) {

    }
}  

whereParamA和只是显示在哪里使用的类ParamBParamC

private class ParamA { }
private class ParamB { }
private class ParamC { }

当您通过 执行操作时new Operation().execute(new ParamA());,调用 firstonPreExcute以实例化您可能需要的一些变量(例如建立连接)。然后将给定的参数execute作为参数放入doInBackground。完成后,返回 fromdoInBackground将作为参数传递到onPostExecute,您可以在其中显示结果。

doInBackground中,您可以将结果发布到 UI 线程。快捷方式是使用publishProgressin doInBackground,因为您不能直接从中调用 UI 线程doInBackground(因为AsyncTask是另一个Thread,它不在 UI 线程上运行)。

实际有用的例子

import java.util.Random;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class AsyncTaskActivity extends Activity implements OnClickListener {
    private Button button;
    private LinearLayout linearLayout;
    private TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        button = new Button(this);
        button.setText("Click to start operation");
        textView = new TextView(this);
        textView.setText("NOT STARTED YET");
        linearLayout.addView(button);
        linearLayout.addView(textView);
        setContentView(linearLayout);
        button.setOnClickListener(this);
    }

    public void onClick(View view){
        if (view == button)
            new LongOperation().execute("Hello");
    }

    private class LongOperation extends AsyncTask<String, Integer, Double> {
        @Override
        protected Double doInBackground(String... params) {
            for(int i = 1; i < params[0].length(); i++) {
                try {
                    Thread.sleep(2000);
                    publishProgress(i, i*i); //proper way to publish results while task is running.
                } 
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return new Random().nextDouble();
        }      

        @Override
        protected void onPostExecute(Double result) {
            textView.setText("Done: random result is " + result);
        }

        @Override
        protected void onPreExecute() {
            Toast.makeText(AsyncTaskActivity.this, "onPreExcecute", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            textView.setText("We just slept for a total of " + (values[0] * 2) + " seconds,  (and btw: " + values[0] + " to the power of 2 is " + values[1] + ").");
        }
    }   
}

您还可以通过此代码访问其他Threads(或doInBackground)中的 UI 线程(尽管您应该尽量避免它):

AsyncTaskActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        textView.setText("Called the UI from Thread");
    }
});
于 2013-03-17T22:52:46.260 回答