Android 在动态生成的文本视图中使用StartActivityForResult

Android 在动态生成的文本视图中使用StartActivityForResult,android,android-intent,android-activity,startactivityforresult,Android,Android Intent,Android Activity,Startactivityforresult,我有一个活动(在其中调用函数)、一个包含所有函数的java文件和一个使用摄像头扫描代码的活动 当主活动加载时,它调用generateTextView函数,该函数用文本视图填充页面。onClick在所有这些服务器上都已启用。单击一个文本视图时,它将启动摄像头活动以扫描条形码。如何将条形码字符串发送回主活动,发送回启动相机活动的文本视图?我一直遇到空对象引用 我需要为这些动态生成的文本视图中的每一个添加标签,并在主活动中将条形码数据发送回它 布局文件 错误日志 E/AndroidRuntime:致

我有一个活动(在其中调用函数)、一个包含所有函数的java文件和一个使用摄像头扫描代码的活动

当主活动加载时,它调用generateTextView函数,该函数用文本视图填充页面。onClick在所有这些服务器上都已启用。单击一个文本视图时,它将启动摄像头活动以扫描条形码。如何将条形码字符串发送回主活动,发送回启动相机活动的文本视图?我一直遇到空对象引用

我需要为这些动态生成的文本视图中的每一个添加标签,并在主活动中将条形码数据发送回它

布局文件 错误日志

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,这解决了我的问题!谢谢你,大卫,这解决了我的问题!