Android 接口认证

Android 接口认证,android,login,interface,runtime-error,Android,Login,Interface,Runtime Error,我已经创建了一个身份验证接口(登录名和密码)。这是代码: package com.example.exercice1part2; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.Vi

我已经创建了一个身份验证接口(登录名和密码)。这是代码:

package com.example.exercice1part2;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private String login="aaa";
private String pwd="bbb";
private EditText editText1;
private EditText editText2;
private Button bouton;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
    TextView text=new TextView(null);
    text.setText("entrer votre login et mot de passe");
    final EditText editText1= new EditText(null);
    final EditText editText2=new EditText(null);
  final Button bouton= new Button("con");
    TableLayout x=new TableLayout(this);
    x.addView(text);
    x.addView(editText1);
    x.addView(editText2);
    x.addView(bouton);
    bouton.setOnClickListener(new OnClickListener(){
         public void onClick (View v){
           if (((editText1.getText().toString().equals(login))&&(editText2.getText().toString().equals(pwd)))==true)
           {

          Toast.makeText(MainActivity.this,"connection valide",Toast.LENGTH_LONG).show();
           if (v==bouton){
              final String requete="http://www.google.fr/search?q="+editText1.getText();
          Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(requete));
          startActivity(intent);}

       }
           else
           {
               Toast.makeText(MainActivity.this,"Pas de Connection " ,Toast.LENGTH_LONG).show();    
               }
         }});


  }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
    }
}
但当我尝试运行应用程序时,会出现以下错误:

11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.os.Looper.loop(Looper.java:137)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.ActivityThread.main(ActivityThread.java:4745)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at java.lang.reflect.Method.invokeNative(Native Method)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at java.lang.reflect.Method.invoke(Method.java:511)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at dalvik.system.NativeStart.main(Native Method)
11-17 18:11:25.426: E/AndroidRuntime(1028): Caused by: java.lang.NullPointerException
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.view.ViewConfiguration.get(ViewConfiguration.java:332)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.view.View.<init>(View.java:3236)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.view.View.<init>(View.java:3295)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.widget.TextView.<init>(TextView.java:447)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.widget.TextView.<init>(TextView.java:442)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.widget.TextView.<init>(TextView.java:438)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at com.example.exercice1part2.MainActivity.onCreate(MainActivity.java:26)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.Activity.performCreate(Activity.java:5008)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-17 18:11:25.426: E/AndroidRuntime(1028):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
11-17 18:11:25.426: E/AndroidRuntime(1028):     ... 11 more
11-17 18:15:40.177: I/Process(1028): Sending signal. PID: 1028 SIG: 9
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.app.ActivityThread.access$600(ActivityThread.java:130)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-17 18:11:25.426:E/AndroidRuntime(1028):位于android.os.Handler.dispatchMessage(Handler.java:99)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.os.Looper.loop(Looper.java:137)
11-17 18:11:25.426:E/AndroidRuntime(1028):位于android.app.ActivityThread.main(ActivityThread.java:4745)
11-17 18:11:25.426:E/AndroidRuntime(1028):位于java.lang.reflect.Method.Invokenactive(本机方法)
11-17 18:11:25.426:E/AndroidRuntime(1028):在java.lang.reflect.Method.invoke(Method.java:511)
11-17 18:11:25.426:E/AndroidRuntime(1028):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-17 18:11:25.426:E/AndroidRuntime(1028):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-17 18:11:25.426:E/AndroidRuntime(1028):在dalvik.system.NativeStart.main(本机方法)
11-17 18:11:25.426:E/AndroidRuntime(1028):由以下原因引起:java.lang.NullPointerException
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.view.ViewConfiguration.get(ViewConfiguration.java:332)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.view.view.(view.java:3236)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.view.view.(view.java:3295)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.widget.TextView。(TextView.java:447)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.widget.TextView。(TextView.java:442)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.widget.TextView。(TextView.java:438)
11-17 18:11:25.426:E/AndroidRuntime(1028):在com.example.exercice1part2.MainActivity.onCreate(MainActivity.java:26)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.app.Activity.performCreate(Activity.java:5008)上
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-17 18:11:25.426:E/AndroidRuntime(1028):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
11-17 18:11:25.426:E/AndroidRuntime(1028):。。。还有11个
11-17 18:15:40.177:I/进程(1028):发送信号。PID:1028信号:9

我不认为
TextView text=newtextview(null)是正确的


尝试使用
TextView text=new TextView(此)

您的onClickListener是一个“匿名内部类”。它可以访问它声明的变量、它的“包含类”(活动)中的变量、包级别类(当前包中未声明为“public”)和公共变量

在onCreate方法中声明并初始化editText2。onCreate方法运行、完成并销毁所有本地声明的变量。onCreate在onClickListener可以运行之前完成,因为UI是在onCreate完成之后才构建的。因此,对editText2的引用不再存在,您将获得NPE

要解决此问题,请将声明移动到类级别,即在onCreate之前:

...
final EditText editText1
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
editText1= new EditText(this);
...
并在onCreate中对其进行初始化:

...
final EditText editText1
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
editText1= new EditText(this);
...

祝你好运。

这是我最后找到的解决方案,它很有效:

public package com.example.exercice1part2;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.method.PasswordTransformationMethod;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private String login="aaa";
private String pwd="bbb";
private EditText editText1;
private EditText editText2;
private TextView text;
private Button bouton;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TableLayout x=new TableLayout(this);
    setContentView(x);
    text =new TextView(getApplicationContext());
    text.setText("entrer votre login et mot de passe");
    editText1= new EditText(this);
    if (editText1.getText().toString().length()==0)
        editText1.setError("nom ne dépasse pas 10 caractère");
    editText2=new EditText(this);
    editText2.setTransformationMethod(PasswordTransformationMethod.getInstance());
    if (editText2.getText().toString().length()==0)
        editText2.setError("mot de passe ne dépasse pas 6 caractère");
  bouton= new Button(this);
  bouton.setText("connection" );

    x.addView(text);
    x.addView(editText1);
    x.addView(editText2);
    x.addView(bouton);
    bouton.setOnClickListener(new OnClickListener(){
         public void onClick (View v){

           if (((editText1.getText().toString().equals(login))&&(editText2.getText().toString().equals(pwd)))==true)
           {

          Toast.makeText(MainActivity.this,"connection valide",Toast.LENGTH_LONG).show();
           if (v==bouton){
              final String requete="http://www.google.fr/search?q="+editText1.getText();
          Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(requete));
          startActivity(intent);}

       }
           else
           {
               Toast.makeText(MainActivity.this,"Pas de Connection " ,Toast.LENGTH_LONG).show();    
               }

         }});


  }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
   }
}

感谢每一位帮助我的人:)

您的日志显示错误来自第26条,它引用了新的TextView语句。您可以尝试将此
更改为
getApplicationContext()
。请在这些更改后将您的日志发送给我们。这次MainActivity在emulator中打开,但它是空的!!在logCat中,我得到了以下信息:11-17 21:05:43.017:E/Trace(1165):打开跟踪文件时出错:没有这样的文件或目录(2)11-17 21:05:43.758:D/gralloc_goldfish(1165):未检测到GPU仿真的仿真器。请编辑您的帖子并放入新日志?(恐怕这类日志与您的问题无关)11-17 21:05:43.017:E/Trace(1165):打开跟踪文件时出错:没有这样的文件或目录(2)11-17 21:05:43.758:D/gralloc_goldfish(1165):未检测到GPU仿真的模拟器。现在,日志中没有任何错误,但控制台中有一个错误,即“[2012-11-17 21:23:42-练习1第2部分]活动管理器:警告:活动未启动,其当前任务已放在前面”好的,我修正了,但是我现在的问题是显示!!我在运行项目后在MainActivity中看不到任何内容!!它是空的,没有按钮,没有编辑文本..请每个问题一个问题。请接受这个问题作为原始问题的答案,并为您的显示问题启动一个新问题,否则这篇文章将充满评论和评论我们必须逐行调试您的代码。我发现了错误!!我忘记放置setContentView(x);!!感谢您的帮助:)