0

我的代码有问题:

我正在开发一个需要您登录的应用程序。该应用程序由一个加载屏幕和一个带有 4 个选项卡的 tabView 组成。最后一个选项卡是一项可让您登录的活动。我在这里设置了 EditText 视图和一个登录按钮。

到目前为止,登录活动已完成,代码如下:

package com.appsoweb.kvodeventer;

import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class KVOMeldingen extends Activity {

       public static final JSONObject jsonResult = null;
       Button bLogin, bCreateAccount, bResetPassword;
       EditText etUsername, etPassword;
       static String Username;
       static String Password;

       public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.meldingen);
             final EditText etUsername = (EditText) findViewById(R.id.etUsername);
             final EditText etPassword = (EditText) findViewById(R.id.etPassword);
             Button bLogin = (Button) findViewById(R.id.bLogin);
             Button bCreateAccount = (Button) findViewById(R.id.bCreateAccount);
             Button bResetPassword = (Button) findViewById(R.id.bResetPassword);

             bLogin.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                           if (etUsername.length() <= 0) {
                                  etUsername.setError("Veld mag niet leeg zijn");
                           } else if (etPassword.length() <= 0) {
                                  etPassword.setError("Veld mag niet leeg zijn");
                           } else {
                                  Username = etUsername.getText().toString();
                                  Password = etPassword.getText().toString();
                           }
                           LoginTask NDLT = new LoginTask();
                           NDLT.execute();
                    }
             });

             bCreateAccount.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                           // Doe iets hier.......

                    }

             });

             bResetPassword.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                           // Doe iets hier........

                    }

             });

       }

       public static String getUsername() {
             return Username;
       }

       public static String getPassword() {
             return Password;
       }

       class LoginTask extends AsyncTask<Void, Void, JSONObject> {
             ProgressDialog waitingDialog;

             @Override
             protected void onPreExecute() {
                    waitingDialog = new ProgressDialog(KVOMeldingen.this);
                    waitingDialog.setMessage("Laden...");
                    waitingDialog.show();
                    super.onPreExecute();
             }

             @Override
             protected JSONObject doInBackground(Void... params) {

                    JSONObject json = JsonFunctionLogin
                                  .getJsonLoginResult("http://api.crossalertdeventer.nl/login.json");
                    return json;

             }

             @Override
             protected void onPostExecute(JSONObject json) {
                    super.onPostExecute(json);
                    if (waitingDialog.isShowing()) {
                           waitingDialog.dismiss();
                           Log.d("iets gebeurt", "gedaan");
                    }
                    try {

                           String LoginResult = json.getString("login");
                           String UserIdResult = json.getString("user_id");
                           Log.d("LoginResult", LoginResult);
                           Log.d("LoginUserId", UserIdResult);
                           json = null;
                           if (LoginResult == "succes"){
                                  // Open activity for listview.
                           } else {
                                  // Don't show items and give error message.
                           }


                    } catch (Exception e) {
                           Log.e("KVOMeldingen", "error" + e.getMessage());

                    }

             }
       }


}

您可以看到身份验证发生在后台。

现在您在 postExecute 方法上看到 If 语句块:如果用户成功登录,我想打开一个活动,该活动从 Web 加载 json 并将其放入列表项中。

现在我不知道该怎么做。因为如果我使用一个意图,新的 listActivity 会打开,但不在我的开始 Activity 的 TabView 中。我怎样才能做到这一点?

4

1 回答 1

0

我做了类似的事情,所以试试这个。将活动传递给 AsyncTask 类并将其保存为成员变量。在 onPostExecute() 方法中,从您的主活动中调用一个方法以打开一个新活动或显示错误消息。它对我有用!;-)

一些代码:

public LoginTask(Activity parentActivity) {
        mParentActivity = parentActivity;
    }

@Override
protected void onPostExecute(JSONObject json) {
    ...
    if (LoginResult == "succes"){
        mParentActivity.openNewActivity(json);
    } else {
        mParentActivity.showErrorMessage("ERROR");
    }
    ...
}
于 2012-07-05T21:36:38.627 回答