英文:
Error while sending intent to other activity
问题
This code appears to be written in Java for an Android application. It consists of two activities: MainActivity
and Testing2
. The primary issue seems to be related to a "TransactionTooLargeException" that occurs when trying to start an activity. This exception typically arises when the data being passed between activities exceeds the allowed size.
Without the full context of your project and layout files, it's challenging to pinpoint the exact issue. However, you may want to consider the following:
-
Check the size of data being passed between activities via
Intent
extras (e.g.,hisnumber
andhisimages
). If these lists become too large, it can trigger the "TransactionTooLargeException." -
Review the layout XML files associated with
MainActivity
andTesting2
to ensure that the UI elements and button IDs match the code. -
Verify that both
MainActivity
andTesting2
are correctly declared in your AndroidManifest.xml file. -
Ensure that the necessary permissions are declared in the manifest if your app requires any specific permissions.
-
Look for any other runtime errors or issues in your code that might be causing unexpected behavior.
Remember to address the data size issue first, as it appears to be the immediate problem causing the crash. You may need to rethink how you pass and handle large amounts of data between activities in your Android app.
英文:
Whats wrong in this code? It is not sending the intent to next page.I have done it many times.When i click on the button on the Mainactivity.java i get this log.It doesn't go to the next page.Intent is not working in this activity why?Hope to get answer soon.Thanks in advance.
package com.example.testing1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ArrayList<String> hisnumber=new ArrayList<>();
ArrayList<Bitmap> hisimages=new ArrayList<>();
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.button);
Intent intent = getIntent();
hisnumber = intent.getStringArrayListExtra("hisnumber");
hisimages = intent.getParcelableArrayListExtra("hisimages");
Log.d("num1", String.valueOf(hisnumber));
Log.d("img1", String.valueOf(hisimages));
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent myIntent = new Intent(MainActivity.this, Testing2.class);
myIntent.putExtra("hisnumber", hisnumber);
myIntent.putParcelableArrayListExtra("hisimages", hisimages);
Log.d("num", String.valueOf(hisnumber));
Log.d("img", String.valueOf(hisimages));
startActivity(myIntent);
}
});
}
}
Mainactivity.java
package com.example.testing1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
public class Testing2 extends AppCompatActivity {
ArrayList<String> hisnumber=new ArrayList<>();
ArrayList<Bitmap> hisimages=new ArrayList<>();
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testing2);
button=findViewById(R.id.button);
Intent intent = getIntent();
hisnumber = intent.getStringArrayListExtra("hisnumber");
hisimages = intent.getParcelableArrayListExtra("hisimages");
Log.d("num3", String.valueOf(hisnumber));
Log.d("img3", String.valueOf(hisimages));
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(hisnumber==null){
hisnumber=new ArrayList<>();
hisimages=new ArrayList<>();
}
hisnumber.add("ass");
Bitmap bp= BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
hisimages.add(bp);
Intent myIntent = new Intent(Testing2.this, MainActivity.class);
myIntent.putExtra("hisnumber", hisnumber);
myIntent.putParcelableArrayListExtra("hisimages", hisimages);
Log.d("num2", String.valueOf(hisnumber));
Log.d("img2", String.valueOf(hisimages));
startActivity(myIntent);
}
});
}
}
Testing.java
07/28 11:07:11: Launching 'app' on Realme RMX1901.
$ adb shell am start -n "com.example.testing1/com.example.testing1.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 18360 on device 'realme-rmx1901-618cb732'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
I/Perf: Connecting to perf service.
E/Perf: Fail to get file list com.example.testing1
getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
Fail to get file list com.example.testing1
getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
W/xample.testing: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
W/xample.testing: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
D/num1: null
D/img1: null
D/WindowManager: Add to mViews: DecorView@5a6d981[MainActivity], this = android.view.WindowManagerGlobal@9161a26,pkg= com.example.testing1
I/AdrenoGLES: QUALCOMM build : e4029f9, I6b4cbc7431
Build Date : 10/01/19
OpenGL ES Shader Compiler Version: EV031.27.05.01
Local Branch :
Remote Branch :
Remote Branch :
Reconstruct Branch :
I/AdrenoGLES: Build Config : S P 8.0.11 AArch64
I/AdrenoGLES: PFP: 0x016ee187, ME: 0x00000000
W/AdrenoUtils: <ReadGpuID_from_sysfs:194>: Failed to open /sys/class/kgsl/kgsl-3d0/gpu_model
<ReadGpuID:218>: Failed to read chip ID from gpu_model. Fallback to use the GSL path
W/Gralloc3: mapper 3.x is not supported
I/Choreographer: Skipped 9 frames! The application may be doing too much work on its main thread.
I/Choreographer: Skipped 1 frames! The application may be doing too much work on its main thread.
D/ColorViewRootUtil: nav gesture mode swipeFromBottom ignore false downY 349 mScreenHeight 2340 mScreenWidth 1080 mStatusBarHeight 54 globalScale 1.125 nav mode 3 event MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=334.0, y[0]=349.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=660935273, downTime=660935273, deviceId=7, source=0x1002, displayId=0 } rotation 0
D/num: null
D/img: null
I/Choreographer: Skipped 1 frames! The application may be doing too much work on its main thread.
I/Choreographer: Skipped 1 frames! The application may be doing too much work on its main thread.
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@fa02c62
D/num3: null
D/img3: null
D/WindowManager: Add to mViews: DecorView@76b323c[Testing2], this = android.view.WindowManagerGlobal@9161a26,pkg= com.example.testing1
I/Choreographer: Skipped 6 frames! The application may be doing too much work on its main thread.
I/Choreographer: Skipped 3 frames! The application may be doing too much work on its main thread.
I/xample.testing: ProcessProfilingInfo new_methods=681 is saved saved_to_disk=1 resolve_classes_delay=5000
D/ColorViewRootUtil: nav gesture mode swipeFromBottom ignore false downY 327 mScreenHeight 2340 mScreenWidth 1080 mStatusBarHeight 54 globalScale 1.125 nav mode 3 event MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=81.0, y[0]=327.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=660939314, downTime=660939314, deviceId=7, source=0x1002, displayId=0 } rotation 0
I/Choreographer: Skipped 1 frames! The application may be doing too much work on its main thread.
E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 3240640)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.testing1, PID: 8832
java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1720)
at android.app.Activity.startActivityForResult(Activity.java:5319)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:5263)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:5648)
at android.app.Activity.startActivity(Activity.java:5616)
at com.example.testing1.Testing2$1.onClick(Testing2.java:50)
at android.view.View.performClick(View.java:7256)
at android.view.View.performClickInternal(View.java:7218)
at android.view.View.access$3800(View.java:824)
at android.view.View$PerformClick.run(View.java:27719)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:228)
at android.app.ActivityThread.main(ActivityThread.java:7782)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)
Caused by: android.os.TransactionTooLargeException: data parcel size 3240640 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:523)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3868)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1714)
at android.app.Activity.startActivityForResult(Activity.java:5319) 
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676) 
at android.app.Activity.startActivityForResult(Activity.java:5263) 
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663) 
at android.app.Activity.startActivity(Activity.java:5648) 
at android.app.Activity.startActivity(Activity.java:5616) 
at com.example.testing1.Testing2$1.onClick(Testing2.java:50) 
at android.view.View.performClick(View.java:7256) 
at android.view.View.performClickInternal(View.java:7218) 
at android.view.View.access$3800(View.java:824) 
at android.view.View$PerformClick.run(View.java:27719) 
at android.os.Handler.handleCallback(Handler.java:883) 
at android.os.Handler.dispatchMessage(Handler.java:100) 
at android.os.Looper.loop(Looper.java:228) 
at android.app.ActivityThread.main(ActivityThread.java:7782) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981) 
I/Process: Sending signal. PID: 8832 SIG: 9
Log
答案1
得分: 1
主要原因是NPE
是这样的:
hismumber = intent.getStringArrayListExtra("hisnumber");
hisimages = intent.getParcelableArrayListExtra("hisimages");
需要检查为什么这不起作用
NPE的解决方法
ArrayList
似乎为null,所以在 onClick()
中检查是否为null:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent myIntent = new Intent(Testing2.this, MainActivity.class);
if(hisnumber != null) {
myIntent.putExtra("hisnumber", hisnumber);
}
if(hisimages != null) {
hisnumber.add("ass");
Bitmap bp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
hisimages.add(bp);
myIntent.putParcelableArrayListExtra("hisimages", hisimages);
Log.d("num2", String.valueOf(hisnumber));
Log.d("img2", String.valueOf(hisimages));
}
startActivity(myIntent);
}
});
英文:
Main reason behind NPE
is this
hisnumber = intent.getStringArrayListExtra("hisnumber");
hisimages = intent.getParcelableArrayListExtra("hisimages");
You need to check why is this not working
Workaround for NPE
Arraylist
seems to be null , so check if its null or not in onClick()
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent myIntent = new Intent(Testing2.this, MainActivity.class);
if(hisnumber!=null){
myIntent.putExtra("hisnumber", hisnumber);
}
if(hisimages!=null){
hisnumber.add("ass");
Bitmap bp= BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
hisimages.add(bp);
myIntent.putParcelableArrayListExtra("hisimages", hisimages);
Log.d("num2", String.valueOf(hisnumber));
Log.d("img2", String.valueOf(hisimages));
}
startActivity(myIntent);
}
});
答案2
得分: 0
Your hisnumber
和 hisimages
列表为空
在添加之前检查它们的可空性...
Testing.java
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (hisnumber != null) {
hisnumber.add("ass");
}
Bitmap bp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
if (hisimages != null) {
hisimages.add(bp);
}
Intent myIntent = new Intent(Testing2.this, MainActivity.class);
myIntent.putExtra("hisnumber", hisnumber);
myIntent.putParcelableArrayListExtra("hisimages", hisimages);
Log.d("num2", String.valueOf(hisnumber));
Log.d("img2", String.valueOf(hisimages));
startActivity(myIntent);
}
});
英文:
Your hisnumber
and hisimages
lists are NULL
Check their Nullability before adding somthing..
Testing.java
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (hisnumber != null) {
hisnumber.add("ass");
}
Bitmap bp= BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
if (hisimages != null) {
hisimages.add(bp);
}
Intent myIntent = new Intent(Testing2.this, MainActivity.class);
myIntent.putExtra("hisnumber", hisnumber);
myIntent.putParcelableArrayListExtra("hisimages", hisimages);
Log.d("num2", String.valueOf(hisnumber));
Log.d("img2", String.valueOf(hisimages));
startActivity(myIntent);
}
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论