应用程序意外终止

时间:2020-07-20 00:41:40

标签: android android-studio runtime-error

public class MainActivity extends AppCompatActivity {

public String[] epc;
public int i = 0;

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



    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
}

public void multipleRead(View view)
{
    try {
        RFIDReader reader = RFID.open();

        reader.inventory(new RFIDCallback() {
                             @Override
                             public void onTagRead(Tag tag) {
                                 epc[i] = tag.getEPC();
                                 i++;
                             }
                         }
        );

    }
    catch (ReaderException e) {
        Toast.makeText(this, "Error: " + e, Toast.LENGTH_LONG).show();
    }
}
}

我正在制作一个简单的应用程序,该应用程序从RFID标签广告中读取ID,然后将其显示在屏幕上。调用reader.inventory一次扫描多个标签。然后,我将这些标签ID号存储在字符串数组epc中。方法multiRead()附加到应用程序上的扫描按钮。因此,每当按下按钮时,就会调用multipleRead()。

但是,在将apk加载到设备上并单击按钮后,出现以下错误:

E/AndroidRuntime: FATAL EXCEPTION: Thread-325
                  Process: com.example.user.myapplication, PID: 3484
                  java.lang.NullPointerException
                      at com.example.user.myapplication.MainActivity$1.onTagRead(MainActivity.java:79)
                      at com.alien.rfid.a$1.run(Unknown Source)
                      at java.lang.Thread.run(Thread.java:841)

我已经阅读了与此类似的其他答案,但对解决此问题没有帮助。如何摆脱运行时错误?

更新的代码和错误:

public class MainActivity extends AppCompatActivity {

  private List<String> epc = new ArrayList<>();
  private TextView textView;
  @Override

  public void multipleRead(View view)
  {
    try {
    // Get global RFID Reader instance
        RFIDReader reader = RFID.open();

        reader.inventory(new RFIDCallback() {
                             @Override
                             public void onTagRead(Tag tag) {
                                 epc.add(tag.getEPC());
                                 textView.append(tag.getEPC() + "\n");
                             }
                         }
        );

    }
    catch (ReaderException e) {
        Toast.makeText(this, "Error: " + e, Toast.LENGTH_LONG).show();
    }
  }

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

    textView = (TextView)findViewById(R.id.tag_id);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
  }
}

错误

E/AndroidRuntime: FATAL EXCEPTION: Thread-347
Process: com.example.user.myapplication, PID: 25039
         android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

         at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6669)
         at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1005)
         at android.view.ViewGroup.invalidateChild(ViewGroup.java:4548)
         at android.view.View.invalidate(View.java:11095)
         at android.view.View.invalidate(View.java:11044)
         at android.widget.TextView.checkForRelayout(TextView.java:6760)
         at android.widget.TextView.setText(TextView.java:3850)
         at android.widget.TextView.setText(TextView.java:3708)
         at android.widget.TextView.append(TextView.java:3443)
         at android.widget.TextView.append(TextView.java:3433)
         at com.example.user.myapplication.MainActivity$1.onTagRead(MainActivity.java:80)
         at com.alien.rfid.a$1.run(Unknown Source)
         at java.lang.Thread.run(Thread.java:841)

0 个答案:

没有答案
相关问题