0

私はアンドロイドの初心者です。ログインしてから、次のファイル Mainscreenactivity を実行したいのですが、ログインがOKと言う方法ではありませんが、Mainscreenactivityの後に表示されません

login.java

        package test.Droidlogin;
    import java.util.ArrayList;
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import test.Droidlogin.library.Httppostaux;
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.SystemClock;
    import android.os.Vibrator;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;

    public class Login extends Activity {
    /** Called when the activity is first created. */

    EditText user;
    EditText pass;
    Button blogin;
    TextView registrar;
    Httppostaux post;
    // String URL_connect="http://www.scandroidtest.site90.com/acces.php";
    String IP_Server="10.0.2.2";//IP DE NUESTRO PC
    String URL_connect="http://10.0.2.2/droidlogin/acces.php";//ruta en donde estan nuestros archivos

    boolean result_back;
    private ProgressDialog pDialog;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        post=new Httppostaux();

        user= (EditText) findViewById(R.id.edusuario);
        pass= (EditText) findViewById(R.id.edpassword);
        blogin= (Button) findViewById(R.id.Blogin);
        registrar=(TextView) findViewById(R.id.link_to_register);

        //Login button action
        blogin.setOnClickListener(new View.OnClickListener(){

            public void onClick(View view){

                //Extreamos datos de los EditText
                String usuario=user.getText().toString();
                String passw=pass.getText().toString();

                //verificamos si estan en blanco
                if( checklogindata( usuario , passw )==true){

                    //si pasamos esa validacion ejecutamos el asynctask pasando el usuario y clave como parametros

                new asynclogin().execute(usuario,passw);                               


                }else{
                    //si detecto un error en la primera validacion vibrar y mostrar un Toast con un mensaje de error.
                    err_login();
                }

            }
                                                            });

        registrar.setOnClickListener(new View.OnClickListener(){

            public void onClick(View view){

                //Abre el navegador al formulario adduser.html
                String url = "http://10.0.2.2/droidlogin/adduser.html";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);               
                                        }           
                                                                });

    }

    //vibra y muestra un Toast
    public void err_login(){
        Vibrator vibrator =(Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(200);
        Toast toast1 = Toast.makeText(getApplicationContext(),"Error:Nombre de usuario o password incorrectos", Toast.LENGTH_SHORT);
        toast1.show();      
    }


    /*Valida el estado del logueo solamente necesita como parametros el usuario y passw*/
    public boolean loginstatus(String username ,String password ) {
        int logstatus=-1;


        ArrayList<NameValuePair> postparameters2send= new ArrayList<NameValuePair>();

                    postparameters2send.add(new BasicNameValuePair("usuario",username));
                    postparameters2send.add(new BasicNameValuePair("password",password));

           //realizamos una peticion y como respuesta obtenes un array JSON
            JSONArray jdata=post.getserverdata(postparameters2send, URL_connect);

            /*como estamos trabajando de manera local el ida y vuelta sera casi inmediato
             * para darle un poco realismo decimos que el proceso se pare por unos segundos para poder
             * observar el progressdialog
             * la podemos eliminar si queremos
             */
            SystemClock.sleep(950);

            //si lo que obtuvimos no es null
                if (jdata!=null && jdata.length() > 0){

                    JSONObject json_data; //creamos un objeto JSON
                    try {
                        json_data = jdata.getJSONObject(0); //leemos el primer segmento en nuestro caso el unico
                         logstatus=json_data.getInt("logstatus");//accedemos al valor 
                         Log.e("loginstatus","logstatus= "+logstatus);//muestro por log que obtuvimos
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }                   

                    //validamos el valor obtenido
                     if (logstatus==0){// [{"logstatus":"0"}] 
                         Log.e("loginstatus ", "invalido");
                         return false;
                     }
                     else{// [{"logstatus":"1"}]
                         Log.e("loginstatus ", "valido");
                         return true;
                     }

              }else{    //json obtenido invalido verificar parte WEB.
                         Log.e("JSON  ", "ERROR");
                        return false;
              }

    }


    //validamos si no hay ningun campo en blanco
    public boolean checklogindata(String username ,String password ){

    if  (username.equals("") || password.equals("")){
        Log.e("Login ui", "checklogindata user or pass error");
    return false;

    }else{

        return true;
    }

}           

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

        String user,pass;
        protected void onPreExecute() {
            //para el progress dialog
            pDialog = new ProgressDialog(Login.this);
            pDialog.setMessage("Autenticando....");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        protected String doInBackground(String... params) {
            //obtnemos usr y pass
            user=params[0];
            pass=params[1];

            //enviamos y recibimos y analizamos los datos en segundo plano.
            if (loginstatus(user,pass)==true){                      
                return "ok"; //login valido
            }else{          
                return "err"; //login invalido                    
            }

        }

        /*Una vez terminado doInBackground segun lo que halla ocurrido 
        pasamos a la sig. activity
        o mostramos error*/
        protected void onPostExecute(String result) {

           pDialog.dismiss();//ocultamos progess dialog.
           Log.e("onPostExecute=",""+result);

           if (result.equals("ok")){

                Intent i=new Intent(Login.this, HiScreen.class);
                i.putExtra("user",user);
                startActivity(i); 

            }else{
                err_login();
            }

                                                    }

        }

    }




    //-----------------------------------------------------------------------

MainscreenActivity.java

package test.Droidlogin;




import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class MainScreenActivity extends Activity{



    Button btnViewProducts;
    Button btnNewProduct;

    boolean result_back;


    @Override
    public void onCreate(Bundle savedInstanceState) {






        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Buttons
        btnViewProducts = (Button) findViewById(R.id.btnViewProducts);
        btnNewProduct = (Button) findViewById(R.id.btnCreateProduct);

        // view products click event
        btnViewProducts.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // Launching All products Activity
                Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);
                startActivity(i);

            }
        });

        // view products click event
        btnNewProduct.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // Launching create new product activity
                Intent i = new Intent(getApplicationContext(), NewProductActivity.class);
                startActivity(i);

            }
        });
    }
}

ありがとう!

4

4 に答える 4

2

ログインしてから、次のファイル Mainscreenactivity を実行したいのですが、ログインがOKと言う方法ではありませんが、Mainscreenactivityの後に表示されません

あなたの質問から私が理解していることは、

if (result.equals("ok")){
    Intent i=new Intent(Login.this, HiScreen.class);
    i.putExtra("user",user);
    startActivity(i); 
}

上記のコードでは、意図は、

Intent i = new Intent(Login.this, MainscreenActivity.class);

実際、あなたは活動を始めHiScreenていMainscreenActivityます。

于 2012-12-14T11:26:56.367 に答える
2
In manifest.xml

 <activity
            android:name=".MainscreenActivity"
            android:label="@string/app_name"/>

In login.java

if (result.equals("ok")){

                Intent intent=new Intent(Login.this,MainscreenActivity.class);
                i.putExtra("user",user);
                startActivity(intent); 

            }else{
                err_login();
            }
于 2012-12-14T11:55:28.840 に答える
0

コード行の下に書く

Intent i=new Intent(Login.this, MainscreenActivity.class);
i.putExtra("user",user);
startActivity(i); 

それ以外の

Intent i=new Intent(Login.this, HiScreen.class);
i.putExtra("user",user);
startActivity(i); 

MainscreenActivity を androidmanifest ファイルに追加します。

<activity
    android:name=".MainscreenActivity"
    android:label="@string/title_activity_main" />

それはあなたの問題を解決します。

于 2012-12-14T11:32:25.737 に答える
0

文字列の一致には equalsIgnoreCase を使用し、応答がOKであること、クラス名がMenifestで宣言されていることを確認してください。

   if (result.equalsIgnoreCase("ok")){

        Intent i=new Intent(Login.this,  MainscreenActivity.class);
        i.putExtra("user",user);
        startActivity(i); 

    }else{
        err_login();
    }
于 2012-12-14T11:34:40.927 に答える