【问题标题】:why does my android app keep stopping in the emulator? [duplicate]为什么我的 android 应用程序一直在模拟器中停止? [复制]
【发布时间】:2021-08-08 22:46:30
【问题描述】:

我在 Eclipse 中制作了一个 Java 消息传递应用程序,它作为 JAR 运行良好...现在我正在尝试使用 Android Studio 制作相同的应用程序,以了解基本的 android 开发...我不明白为什么我收到错误消息“ChatAppAndroidClone 不断停止”。

在 logCat 中它说:

2021-05-19 11:57:05.907 25336-25362/com.jasonkadams.chatappandroidclone E/AndroidRuntime:致命异常:Thread-2 进程:com.jasonkadams.chatappandroidclone,PID:25336 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.io.BufferedReader.readLine()” 在 com.jasonkadams.chatappandroidclone.MainActivity$IncomingReader.run(MainActivity.java:99) 在 java.lang.Thread.run(Thread.java:764)

有谁知道为什么会发生这种情况?提前致谢

这是我的 java 代码(只有一个类):

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {
    BufferedReader reader;
    PrintWriter writer;
    Socket sock;
    //String userName = System.getProperty("user.name");
    String emoji = "8===D";

    Button btn_send,btn_emoji;
    EditText outgoing;
    TextView incoming;

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

        btn_send=findViewById(R.id.btn_send);
        btn_emoji=findViewById(R.id.btn_emoji);

        outgoing=findViewById(R.id.outgoing);
        incoming=findViewById(R.id.incoming);

        //set up networking and thread for incoming messages
        setUpNetworking();
        Thread readerThread = new Thread(new IncomingReader());
        readerThread.start();

        //BUTTONS//

        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // if (outgoing.getText() != null)
                try {
                    writer.println("userName" + ": "+outgoing.getText().toString());
                    writer.flush();

                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                outgoing.setText("");
                outgoing.requestFocus();
            }
        });

        btn_emoji.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    writer.println("userName" + ": "+emoji);
                    writer.flush();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
    }

    //METHODS//
    private void setUpNetworking() {
        try {
            sock = new Socket("10.0.0.171", 5000);
            InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
            reader = new BufferedReader(streamReader);
            writer = new PrintWriter(sock.getOutputStream());
            System.out.println("Server connection established.");

            incoming.append("Server connection established." + "\n");

        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Server connection failed.");

            incoming.append("Server connection failed." + "\n");
        }
    }

    // displays messages
    class IncomingReader implements Runnable {
        public void run() {
            String message;
            try {
                while ((message = reader.readLine()) != null) {

                    System.out.println("client read " + message);

                    incoming.append(message+"\n");
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

【问题讨论】:

  • 请检查您的LogCat 并粘贴错误。
  • 抱歉,这里是:2021-05-19 11:57:05.907 25336-25362/com.jasonkadams.chatappandroidclone E/AndroidRuntime:致命异常:线程 2 进程:com.jasonkadams.chatappandroidclone , PID: 25336 java.lang.NullPointerException: 尝试在 com.jasonkadams.chatappandroidclone.MainActivity$IncomingReader.run(MainActivity .java:99) 在 java.lang.Thread.run(Thread.java:764)
  • 请检查您的活动的第 99 行,这就是问题所在;有一个 NullPointerException

标签: java android android-emulator


【解决方案1】:

在您的清单 (AndroidManifest.xml) 中添加 <uses-permission android:name="android.permission.INTERNET"/>

当然,android 不允许您在主线程中执行new Socket("10.0.0.171", 5000);,这可能是您的下一次崩溃。为此,您可以查看 stackoverflow 中的其他讨论,例如 Android - Connect to socket in separate thread

【讨论】:

    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2015-09-07
    相关资源
    最近更新 更多