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をロードして、リストItemに配置します。

今、私はそれを行う方法がわかりません。インテントを使用すると、新しいlistActivityが開きますが、開始アクティビティの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 に答える