不幸的是,Android应用程序已停止

时间:2016-02-17 17:52:15

标签: android

我想在Android中创建一个登录程序。我为这个登录程序编写了代码。在此程序中,我将用户名和密码发送到服务器进行身份验证。但是,当我打开应用程序并输入用户名和密码并单击“登录”按钮时,我的应用程序很快停止了。但用户名和密码将发送到服务器。当我点击“登录”按钮时,意味着我的应用程序将停止。这是我的代码。

public class LogIn extends Activity implements View.OnClickListener {

    private Socket socket;
    private DataOutputStream out;
    private DataInputStream in;

    private String username,password,s;

    EditText eT_username,eT_password;
    Button b_login,b_signup,b_connect;
    TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_log_in);

        eT_username = (EditText)findViewById(R.id.eT_username);
        eT_password = (EditText)findViewById(R.id.eT_password);

        b_login = (Button)findViewById(R.id.b_login);
        b_signup = (Button)findViewById(R.id.b_signup);
        b_connect = (Button)findViewById(R.id.b_connect);

        t = (TextView)findViewById(R.id.tV);

        b_login.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String toast_msg;
        try {
            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());

            out.writeUTF("1");

            username = eT_username.getText().toString();
            password = eT_password.getText().toString();

            out.writeUTF(username);
            //        out.flush();
            out.writeUTF(password);
            //        out.flush();

            t.setText("hi");

            s = in.readUTF();


            if (s.equals("ok")) {
                toast_msg = "Login is successfull";
                t.setText(toast_msg);
            } else {
                toast_msg = "username or password is incorrect";
                t.setText(toast_msg);
            }

        } catch (IOException e) {
            t.setText(e.toString());
        }
    }

    public void connect(View v)
    {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try
                {
                    socket = new Socket("192.168.0.101",5000);

                }
                catch(Exception e)
                {
                    TextView t = (TextView)findViewById(R.id.textView);
                    t.setText(e.toString());
                    //   Toast.makeText(LogIn.this,"Make sure that you are connected to Internet",Toast.LENGTH_LONG).show();
                }
            }
        }).start();
    }

    public void openSignUp(View v)
    {
        if (v.getId()== R.id.b_signup)
        {
            Intent i =  new Intent(LogIn.this,SignUp.class);
            startActivity(i);
        }
        new SignUp(socket);
    }
}

错误:

02-17 23:34:34.340 2156-2156/? E/Zygote: v2
02-17 23:34:34.340 2156-2156/? I/libpersona: KNOX_SDCARD checking this for 10118
02-17 23:34:34.340 2156-2156/? I/libpersona: KNOX_SDCARD not a persona
02-17 23:34:34.340 2156-2156/? I/SELinux: Function: selinux_compare_spd_ram , priority [2] , priority version is VE=SEPF_SM-G531F_5.1.1_0020
02-17 23:34:34.340 2156-2156/? E/SELinux: [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
02-17 23:34:34.340 2156-2156/? I/art: Late-enabling -Xcheck:jni
02-17 23:34:34.350 2156-2156/? D/TimaKeyStoreProvider: in addTimaSignatureService
02-17 23:34:34.350 2156-2156/? D/TimaKeyStoreProvider: TimaSignature is unavailable
02-17 23:34:34.350 2156-2156/? D/ActivityThread: Added TimaKesytore provider
02-17 23:34:34.350 2156-2156/? I/SAMP: ActivityThread() - SAMP_ENABLE : true
02-17 23:34:34.450 2156-2156/? D/ContextImpl: ContextImpl running for user UserHandle{0} 0
02-17 23:34:34.470 2156-2156/kiran.onlinejavacompiler D/ContextImpl: ContextImpl running for user UserHandle{0} 0
02-17 23:34:34.470 2156-2156/kiran.onlinejavacompiler W/ResourcesManager: getTopLevelResources: null for user  0
02-17 23:34:34.490 2156-2156/kiran.onlinejavacompiler D/ContextImpl: ContextImpl running for user UserHandle{0} 0
02-17 23:34:34.500 2156-2156/kiran.onlinejavacompiler D/ContextImpl: ContextImpl running for user UserHandle{0} 0
02-17 23:34:34.500 2156-2156/kiran.onlinejavacompiler W/ResourcesManager: getTopLevelResources: null for user  0
02-17 23:34:34.510 2156-2156/kiran.onlinejavacompiler W/ResourcesManager: getTopLevelResources: null for user  0
02-17 23:34:34.510 2156-2156/kiran.onlinejavacompiler D/DisplayManager: DisplayManager()
02-17 23:34:34.560 2156-2156/kiran.onlinejavacompiler D/PhoneWindow: *FMB* installDecor mIsFloating : false
02-17 23:34:34.560 2156-2156/kiran.onlinejavacompiler D/PhoneWindow: *FMB* installDecor flags : -2139029248
02-17 23:34:34.600 2156-2199/kiran.onlinejavacompiler D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
02-17 23:34:34.630 2156-2156/kiran.onlinejavacompiler D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
02-17 23:34:34.630 2156-2156/kiran.onlinejavacompiler D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
02-17 23:34:34.670 2156-2199/kiran.onlinejavacompiler I/OpenGLRenderer: Initialized EGL, version 1.4
02-17 23:34:34.670 2156-2199/kiran.onlinejavacompiler D/GC: <tid=2199> OES20 ===> GC Version   : GC version rls_5011p6_GC5.5.13 
02-17 23:34:34.680 2156-2199/kiran.onlinejavacompiler D/OpenGLRenderer: Enabling debug mode 0
02-17 23:34:34.840 2156-2156/kiran.onlinejavacompiler I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@3241f92a time:6983437
02-17 23:34:36.730 2156-2156/kiran.onlinejavacompiler D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
02-17 23:34:38.940 2156-2156/kiran.onlinejavacompiler D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
02-17 23:34:41.900 2156-2156/kiran.onlinejavacompiler D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
02-17 23:34:44.820 2156-2156/kiran.onlinejavacompiler D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
02-17 23:34:44.900 2156-2156/kiran.onlinejavacompiler D/AndroidRuntime: Shutting down VM
02-17 23:34:44.900 2156-2156/kiran.onlinejavacompiler E/AndroidRuntime: FATAL EXCEPTION: main Process: kiran.onlinejavacompiler, PID: 2156 android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:249)
at libcore.io.IoBridge.recvfrom(IoBridge.java:553)
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:485)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
at libcore.io.Streams.readFully(Streams.java:81)
at java.io.DataInputStream.readShort(DataInputStream.java:152)
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:165)
at java.io.DataInputStream.readUTF(DataInputStream.java:169)
at kiran.onlinejavacompiler.LogIn.onClick(LogIn.java:65)
at android.view.View.performClick(View.java:5076)
at android.view.View$PerformClick.run(View.java:20279)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5910)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
02-17 23:34:46.350 2156-2156/kiran.onlinejavacompiler I/Process: Sending signal. PID: 2156 SIG: 9

2 个答案:

答案 0 :(得分:0)

您永远不会调用connect()方法,因此socket方法中nullonClick(),您尝试使用它来获取输出流。

然而再次修复这还不够。您将在一个单独的线程中实例化socket,然后尝试在主线程中实际使用套接字(“UI线程”),这将再次导致您的应用程序崩溃。

或许只需将所有网络操作放入AsyncTask

答案 1 :(得分:0)

你可能正在尝试连接主线程,创建一个线程并连接到它,

你的代码中的其他问题是connect方法,请将expcetion包含在内(对不起我的英文)

public void connect(View v)
{
    new Thread(new Runnable() {
        @Override
        public void run() {
            try
            {
                socket = new Socket("192.168.0.101",5000);

            }
            catch(Exception e)
            {

               Runneable runException = new Runnable() {
                 @Override
               public void run() {
                TextView t = (TextView)findViewById(R.id.textView);
                t.setText(e.toString());
                //   Toast.makeText(LogIn.this,"Make sure that you are    connected to Internet",Toast.LENGTH_LONG).show();
           };
        runOnUiThread(runException);
            }
        }
    }).start();
}