Android 在动态生成的文本视图中使用StartActivityForResult
我有一个活动(在其中调用函数)、一个包含所有函数的java文件和一个使用摄像头扫描代码的活动 当主活动加载时,它调用generateTextView函数,该函数用文本视图填充页面。onClick在所有这些服务器上都已启用。单击一个文本视图时,它将启动摄像头活动以扫描条形码。如何将条形码字符串发送回主活动,发送回启动相机活动的文本视图?我一直遇到空对象引用 我需要为这些动态生成的文本视图中的每一个添加标签,并在主活动中将条形码数据发送回它 布局文件 错误日志Android 在动态生成的文本视图中使用StartActivityForResult,android,android-intent,android-activity,startactivityforresult,Android,Android Intent,Android Activity,Startactivityforresult,我有一个活动(在其中调用函数)、一个包含所有函数的java文件和一个使用摄像头扫描代码的活动 当主活动加载时,它调用generateTextView函数,该函数用文本视图填充页面。onClick在所有这些服务器上都已启用。单击一个文本视图时,它将启动摄像头活动以扫描条形码。如何将条形码字符串发送回主活动,发送回启动相机活动的文本视图?我一直遇到空对象引用 我需要为这些动态生成的文本视图中的每一个添加标签,并在主活动中将条形码数据发送回它 布局文件 错误日志 E/AndroidRuntime:致
E/AndroidRuntime:致命异常:主
进程:com.example.rsscanner,PID:16095
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()”
在android.app.Activity.startActivityForResult(Activity.java:4225)上
位于androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
在android.app.Activity.startActivityForResult(Activity.java:4183)
位于androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
位于com.example.rsscanner.models.LayoutElements$1.onClick(LayoutElements.java:62)
在android.view.view.performClick(view.java:5610)中
在android.view.view$PerformClick.run(view.java:22265)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
您的类LayoutElements
扩展了AppCompatActivity
,但看起来您并没有像使用活动那样使用它。不能使用new
创建活动的实例。只有Android可以实例化Android组件(服务、活动、广播接收器、提供者
)。您的类LayoutElements
不是活动
,不应扩展AppCompatActivity
。如果这样做,您将看到未定义startActivityForResult()
。这是正确的
要调用该方法,需要从活动中调用它。您可以更改此选项:
Intent intent = new Intent(ct, MctCameraActivity.class);
startActivityForResult(intent, 1);
为此:
Intent intent = new Intent(activity, MctCameraActivity.class);
activity.startActivityForResult(intent, 1);
并将方法签名更改为:
public TextView textViewGenerate(final Context ct, String tag, Integer id) {
致:
确保在调用textViewGenerate()
时将当前的活动作为第一个参数传递
注意:您需要将onActivityResult()
移动到调用textViewGenerate()
的实际活动
类,因为它将在调用startActivityForResult()
的活动
上被调用,但看起来您并没有像使用活动那样使用它。不能使用new
创建活动的实例。只有Android可以实例化Android组件(服务、活动、广播接收器、提供者
)。您的类LayoutElements
不是活动
,不应扩展AppCompatActivity
。如果这样做,您将看到未定义startActivityForResult()
。这是正确的
要调用该方法,需要从活动中调用它。您可以更改此选项:
Intent intent = new Intent(ct, MctCameraActivity.class);
startActivityForResult(intent, 1);
为此:
Intent intent = new Intent(activity, MctCameraActivity.class);
activity.startActivityForResult(intent, 1);
并将方法签名更改为:
public TextView textViewGenerate(final Context ct, String tag, Integer id) {
致:
确保在调用textViewGenerate()
时将当前的活动作为第一个参数传递
注意:您需要将onActivityResult()
移动到调用textViewGenerate()
的实际Activity
类,因为它将在调用startActivityForResult()
的活动中被调用。这是否回答了您的问题?不幸的是,事实并非如此。调用此类时,我从主活动传入上下文,并在动态设置TextView时将其用作参数。这是否回答了您的问题?不幸的是,事实并非如此。调用这个类时,我从主活动传入上下文,并在动态设置TextView时将其用作参数。谢谢David,这解决了我的问题!谢谢你,大卫,这解决了我的问题!