【发布时间】:2020-07-16 18:48:32
【问题描述】:
部署在 Xamarin.Android 中制作的 APK 时出现此错误(来自我设备的 Logcat)
>*android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
at MyApp.InvoiceActivity.SendJson (System.String Json, System.String Route, System.String Token) [0x00053] in <f72bff8dbb074291a532e12425c8737a>:0
at MyApp.InvoiceActivity.OnCreate (Android.OS.Bundle bundle) [0x0004a] in <f72bff8dbb074291a532e12425c8737a>:0
at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x0000f] in <0181fdcaff164e668b24279eb4fb429f>:0
at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.1(intptr,intptr,intptr)
at crc64df67992c1ed0ef67.InvoiceActivity.n_onCreate(Native Method)
at crc64df67992c1ed0ef67.InvoiceActivity.onCreate(Unknown Source:0)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)*
这个错误说明我的问题是从 sendJson() 方法开始的,这是这个方法的 sn-p
public string SendJson(string Json, string Route = "MyRoute", string Token = "MyToken")
{
try
{
using var client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/json";
client.Headers[HttpRequestHeader.Authorization] = "Token token=" + Token;
string response = client.UploadString(Route, "POST", Json);
return response;
}
catch (WebException ex)
{
var response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
return response;
}
}
但是,此错误仅在从导出的 APK 安装和执行应用时发生。当我使用 Visual Studio 调试器时,该方法运行良好。
我尝试将方法放在隔离类或 Activity 中(甚至将部分方法放在 onCreate() 方法中),更改级别访问,但没有任何效果。
编辑
感谢大家的回答,并给我一些关于这个问题的想法。进行一些测试后,我发现在项目属性的编译部分启用“优化代码”时会出现问题。在 Xamarin.Android 中,要导出已签名的 APK,您需要首先将项目设置为“发布”模式,当然,默认情况下会启用此选项。我不确定这是编译器的错误还是只是我的错,所以我会继续调查:)。无论如何,再次感谢您的帮助。
【问题讨论】:
-
空引用异常可能来自您的异常处理程序;我不知道。分而治之,你应该很容易找到它。此外,您可能应该编辑您的帖子以不包含您的代码两次。
-
感谢您的回答。即使没有 try-catch,我也尝试了该方法,结果是相同的:通过 Debugger 部署应用程序效果很好,但是当导出 APK 方法不起作用并且我的应用程序因错误而崩溃(在问题开始时描述)。发布我的代码是为了了解我想要做什么。对不起我的英语。
-
欢迎来到 SO !你可以试试
async/await方法使用WebClient。然后检查是否可以收到响应。 -
感谢小辈的回答。我试过这个方法,当然效果很好,我会投入我的项目中,非常感谢你的想法。但是,问题仍然存在。进行一些测试后,我发现:启用项目编译部分中的“优化代码”时,我的应用程序崩溃。所以,我禁用了它,它就像一个魅力。有点好奇,因为从未见过。
标签: c# rest xamarin xamarin.android