掉毛秃头 2023-09-07 20:45 采纳率: 0%
浏览 8

Androidstudio报错

我现在有一个主布局,和几个小布局,这个软件通过socket通信接收数据,我想让接收到的数据显示在小布局上

当我在MainActivity.java里面声明并使用它时我发现软件出现了闪退,下面是我的错误信息

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.jiedianshuju, PID: 23746
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.example.jiedianshuju.MainActivity$8$1.run(MainActivity.java:200)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:742)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632)

下面是我的小布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    tools:context=".yijieDian">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/text1"
            android:layout_centerHorizontal="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="第一组"
            android:textSize="200sp">
        </TextView>
        <TextView
            android:id="@+id/text2"
            android:layout_below="@id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="节点状态:已连接"
            android:textSize="120sp">
        </TextView>
        <TextView
            android:id="@+id/text3"
            android:layout_below="@id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="连接数据:"
            android:textSize="120sp">
        </TextView>
        <TextView
            android:id="@+id/textLi4"
            android:layout_below="@id/text2"
            android:layout_toRightOf="@id/text3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textSize="120sp">
        </TextView>
    </RelativeLayout>

</LinearLayout>

以及我的主程序


package com.example.jiedianshuju;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class MainActivity extends AppCompatActivity {
    private ImageButton imageButton1, imageButton2, imageButton3, imageButton4, imageButton5, imageButton6;
    private Socket socket;
    private View view;
    private TextView textLi4,textView1, textView2, textView3, textView4, textView5, textView6, textView7, textView8, textView9, textView10, textView11, textView12;
    private Context context = this;

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

        socketAd();
        imageButton1 = findViewById(R.id.image1);
        imageButton2 = findViewById(R.id.image2);
        imageButton3 = findViewById(R.id.image3);
        imageButton4 = findViewById(R.id.image4);
        imageButton5 = findViewById(R.id.image5);
        imageButton6 = findViewById(R.id.image6);

        textView1 = findViewById(R.id.textView1);
        textView2 = findViewById(R.id.textView2);
        textView3 = findViewById(R.id.textView3);
        textView4 = findViewById(R.id.textView4);
        textView5 = findViewById(R.id.textView5);
        textView6 = findViewById(R.id.textView6);
        textView7 = findViewById(R.id.textView7);
        textView8 = findViewById(R.id.textView8);
        textView9 = findViewById(R.id.textView9);
        textView10 = findViewById(R.id.textView10);
        textView11 = findViewById(R.id.textView11);
        textView12 = findViewById(R.id.textView12);

        textLi4 = findViewById(R.id.textLi4);

        Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/dongman.ttf");
        textView1.setTypeface(typeface);
        textView2.setTypeface(typeface);
        textView3.setTypeface(typeface);
        textView4.setTypeface(typeface);
        textView5.setTypeface(typeface);
        textView6.setTypeface(typeface);
        textView7.setTypeface(typeface);
        textView8.setTypeface(typeface);
        textView9.setTypeface(typeface);
        textView10.setTypeface(typeface);
        textView11.setTypeface(typeface);
        textView12.setTypeface(typeface);

        TranslateAnimation animation = new TranslateAnimation(0, 0, 400, 0);
        animation.setRepeatCount(0);
        animation.setDuration(3000);

        imageButton1.setAnimation(animation);
        imageButton2.setAnimation(animation);
        imageButton3.setAnimation(animation);
        imageButton4.setAnimation(animation);
        imageButton5.setAnimation(animation);
        imageButton6.setAnimation(animation);

        imageButton1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                //Handler handler = new Handler();
                //handler.postDelayed(new Runnable() {
                //@Override
                //public void run() {
                //imageButton1.setImageResource(R.drawable.yello);
                //}
                //},1000);
                //imageButton1.setImageResource(R.drawable.blue);
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, yijieDian.class);
                    startActivity(intent);
                }
                return false;

            }
        });
        imageButton2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, erjieDian.class);
                    startActivity(intent);
                }
                return false;
            }
        });
        imageButton3.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, sanjieDian.class);
                    startActivity(intent);
                }
                return false;
            }
        });
        imageButton4.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, sijieDian.class);
                    startActivity(intent);
                }
                return false;
            }
        });
        imageButton5.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, wujieDian.class);
                    startActivity(intent);
                }
                return false;
            }
        });
        imageButton6.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, liujieDian.class);
                    startActivity(intent);
                }
                return false;
            }
        });
    }

    private void socketAd() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    socket = new Socket("172.18.1.15", 6003);
                    receiveCmd();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private void receiveCmd() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {

                        // 读取数据
                        final byte[] buffer = new byte[1024];
                        int len = socket.getInputStream().read(buffer);
                        while (len != -1) {
                            // do something with buffer
                            len = socket.getInputStream().read(buffer);

                            if (buffer[0] == (byte) 0x55 && buffer[11] == (byte) 0xaa)//解析正确
                            {
                                if (buffer[2] == (byte) 0x01)//第一个节点
                                {
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            float temp = 0, hum = 0, light = 0;
                                            temp = (float) ((buffer[3] << 8) | buffer[4]) / 100;
                                            hum = (float) ((buffer[5] << 8) | buffer[6]) / 100;
                                            light = (float) ((buffer[7] << 8) | buffer[8]) / 100;
                                            textView2.setText("已连接");
                                            textLi4.setText("温度: "+temp+"湿度:"+hum+"光照:"+light);
                                        }
                                    });
                                } else if (buffer[2] == (byte) 0x02)//第二个节点
                                {
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            float temp = 0, hum = 0, light = 0;
                                            temp = (float) ((buffer[3] << 8) | buffer[4]) / 100;
                                            hum = (float) ((buffer[5] << 8) | buffer[6]) / 100;
                                            light = (float) ((buffer[7] << 8) | buffer[8]) / 100;
                                            textView4.setText("已连接");
                                            Toast.makeText(context, "温度:" + String.valueOf(temp) + "  湿度:" + String.valueOf(hum) + "  光照:" + String.valueOf(light), Toast.LENGTH_SHORT).show();
                                        }
                                    });

                                } else if (buffer[2] == (byte) 0x03)//第三个节点
                                {
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            float temp = 0, hum = 0, light = 0;
                                            temp = (float) ((buffer[3] << 8) | buffer[4]) / 100;
                                            hum = (float) ((buffer[5] << 8) | buffer[6]) / 100;
                                            light = (float) ((buffer[7] << 8) | buffer[8]) / 100;
                                            textView6.setText("已连接");
                                            Toast.makeText(context, "温度:" + String.valueOf(temp) + "  湿度:" + String.valueOf(hum) + "  光照:" + String.valueOf(light), Toast.LENGTH_SHORT).show();
                                        }
                                    });

                                } else if (buffer[2] == (byte) 0x04)//第四个节点
                                {
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            Toast.makeText(MainActivity.this, "节点四连接成功", Toast.LENGTH_LONG).show();
                                            float temp = 0, hum = 0, light = 0;
                                            temp = (float) ((buffer[3] << 8) | buffer[4]) / 100;
                                            hum = (float) ((buffer[5] << 8) | buffer[6]) / 100;
                                            light = (float) ((buffer[7] << 8) | buffer[8]) / 100;
                                            textView8.setText("已连接");
                                            Toast.makeText(context, "温度:" + String.valueOf(temp) + "  湿度:" + String.valueOf(hum) + "  光照:" + String.valueOf(light), Toast.LENGTH_SHORT).show();
                                        }
                                    });

                                } else if (buffer[2] == (byte) 0x05)//第五个节点
                                {
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            Toast.makeText(MainActivity.this, "节点五连接成功", Toast.LENGTH_LONG).show();
                                            float temp = 0, hum = 0, light = 0;
                                            temp = (float) ((buffer[3] << 8) | buffer[4]) / 100;
                                            hum = (float) ((buffer[5] << 8) | buffer[6]) / 100;
                                            light = (float) ((buffer[7] << 8) | buffer[8]) / 100;
                                            textView10.setText("已连接");
                                            Toast.makeText(context, "温度:" + String.valueOf(temp) + "  湿度:" + String.valueOf(hum) + "  光照:" + String.valueOf(light), Toast.LENGTH_SHORT).show();
                                        }
                                    });
                                } else if (buffer[2] == (byte) 0x06)//第六个节点
                                {
                                    runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            Toast.makeText(MainActivity.this, "节点六连接成功", Toast.LENGTH_LONG).show();
                                            float temp = 0, hum = 0, light = 0;
                                            temp = (float) ((buffer[3] << 8) | buffer[4]) / 100;
                                            hum = (float) ((buffer[5] << 8) | buffer[6]) / 100;
                                            light = (float) ((buffer[7] << 8) | buffer[8]) / 100;
                                            textView12.setText("已连接");
                                            Toast.makeText(context, "温度:" + String.valueOf(temp) + "  湿度:" + String.valueOf(hum) + "  光照:" + String.valueOf(light), Toast.LENGTH_SHORT).show();
                                        }
                                    });
                                }
                            }
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

        }).start();
    }
}

我在网上搜了一大堆还是未能解决,我本来当时一个空指针,但是无果,如果各位看出来麻烦纠正

  • 写回答

2条回答 默认 最新

  • 9102fun 2023-09-25 15:32
    关注

    空对象异常了,可能是子线程在设置text view时,textview还没有执行findviewbyid,可以试试在findviewbyid之后执行socketAd

    评论

报告相同问题?

问题事件

  • 创建了问题 9月7日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111