java类中使用toast_关于Java:SurfaceView中的Toast

我想在SurfaceView类中使用Toast创建一条消息。 有了这段代码,我有以下异常...

Toast toast = Toast.makeText(this.getContext(),"Message", Toast.LENGTH_LONG);

toast.show();

11-05 02:06:08.070:错误/ AndroidRuntime(265):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序

如何在SurfaceView中进行烤面包?

您需要通过UI线程显示Toast。每当您初始化SurfaceView时,请执行以下操作:

Handler handler;

private void initMe()

{

handler = new Handler();

}

然后,无论您想烤面包的地方,都可以这样做:

handler.post(new Runnable(){

public void run(){

Toast.makeText(context,"Message", Toast.LENGTH_LONG).show();

}

});

您需要确保从UI线程调用了" initMe"。您可能是通过UI线程调用的onCreate初始化SurfaceView的,所以您会很好(我假设这是自定义的SufaceView扩展类?)

它显示了一个警告..."对于类型为new Runnable(){}的方法getContext()未定义"

对。 不带this的" MyActivity.this.getContext()"或可能只是" getContext()"。

我能够直接在SurfaceView类中创建Toast,而无需使用任何处理程序。

如果在内部类中使用关键字" this",但打算获取activity(外部/封装)类的对象,则需要使用其类名,例如" MainActivity.this"。这是一些普通的Java开发人员可能不知道的概念。

或者,您可以创建一个Context的静态对象,并为其分配活动的上下文,然后在需要它的上下文中的任何地方简单地使用它。

或仅在您的SurfaceView中使用:

runOnUiThread(new Runnable() {

public void run() {

Toast.makeText(ActivityName.this,"Message", Toast.LENGTH_LONG).show();

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android Studio 3.0,可以通过使用Zxing开源代码库来实现条形码和二维码扫描。以下是使用菜单选项调用摄像头扫描二维码及条形码的步骤: 1. 在build.gradle文件添加以下依赖项: dependencies { compile 'com.google.zxing:core:3.3.0' compile 'com.journeyapps:zxing-android-embedded:3.5.0' } 2. 在AndroidManifest.xml文件添加以下权限: <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> 3. 在布局文件添加一个SurfaceView和一个Button: <SurfaceView android:id="@+id/preview" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/scan_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Scan" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> 4. 在MainActivity.java文件添加以下代码: public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler { private ZXingScannerView mScannerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mScannerView = new ZXingScannerView(this); setContentView(mScannerView); Button scanButton = (Button) findViewById(R.id.scan_button); scanButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mScannerView.setResultHandler(MainActivity.this); mScannerView.startCamera(); } }); } @Override public void onPause() { super.onPause(); mScannerView.stopCamera(); } @Override public void handleResult(Result result) { Toast.makeText(this, result.getText(), Toast.LENGTH_SHORT).show(); mScannerView.resumeCameraPreview(this); } } 5. 运行应用程序并点击“Scan”按钮,然后将摄像头对准二维码或条形码即可扫描。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值