Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
否';id';在类型';附录4.主要活动和x27;将Xamarin.Android连接到Azure_Android_Visual Studio_Azure_Xamarin_Xamarin.android - Fatal编程技术网

否';id';在类型';附录4.主要活动和x27;将Xamarin.Android连接到Azure

否';id';在类型';附录4.主要活动和x27;将Xamarin.Android连接到Azure,android,visual-studio,azure,xamarin,xamarin.android,Android,Visual Studio,Azure,Xamarin,Xamarin.android,我刚刚尝试将数据插入azure平台。但问题出现了。 在类型“app4.MainActivity”上找不到“id”成员我使用断点检查问题,它会转到“JObject jo=new JObject();或下一行(现在断点不起作用) 编辑后 Startup.MobileApp Backend Part using System; using System.Collections.Generic; using System.Configuration; using System.Data.Entity;

我刚刚尝试将数据插入azure平台。但问题出现了。 在类型“app4.MainActivity”上找不到“id”成员我使用断点检查问题,它会转到“JObject jo=new JObject();或下一行(现在断点不起作用)


编辑后 Startup.MobileApp

Backend Part
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.Entity;
using System.Web.Http;
using Microsoft.Azure.Mobile.Server;
using Microsoft.Azure.Mobile.Server.Authentication;
using Microsoft.Azure.Mobile.Server.Config;
using TrendDemoService.DataObjects;
using TrendDemoService.Models;
using Owin;

namespace TrendDemoService
{
    public partial class Startup
    {
        public static void ConfigureMobileApp(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();

            //For more information on Web API tracing, see http://go.microsoft.com/fwlink/?LinkId=620686 
            config.EnableSystemDiagnosticsTracing();

            new MobileAppConfiguration()
                .UseDefaultConfiguration()
                .ApplyTo(config);

            // Use Entity Framework Code First to create database tables based on your DbContext
            Database.SetInitializer(new TrendDemoInitializer());

            // To prevent Entity Framework from modifying your database schema, use a null database initializer
            // Database.SetInitializer<TrendDemoContext>(null);

            MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings();

            if (string.IsNullOrEmpty(settings.HostName))
            {
                // This middleware is intended to be used locally for debugging. By default, HostName will
                // only have a value when running in an App Service application.
                app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions
                {
                    SigningKey = ConfigurationManager.AppSettings["SigningKey"],
                    ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] },
                    ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] },
                    TokenHandler = config.GetAppServiceTokenHandler()
                });
            }
            app.UseWebApi(config);
        }
    }

    public class TrendDemoInitializer : CreateDatabaseIfNotExists<Context>
    {
        protected override void Seed(Context context)
        {
            List<MyFirstDbTableModel> todoItems = new List<MyFirstDbTableModel>
            {
                new MyFirstDbTableModel { Id = Guid.NewGuid().ToString(), Questions = "First item", Complete = false },
                new MyFirstDbTableModel { Id = Guid.NewGuid().ToString(), Questions = "Second item", Complete = false },
            };

            foreach (MyFirstDbTableModel todoItem in todoItems)
            {
                context.Set<MyFirstDbTableModel>().Add(todoItem);
            }

            base.Seed(context);
        }
    }
}
06-28 14:20:48.971 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 0
06-28 14:20:49.025 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 1
06-28 14:20:49.075 D/ViewRootImpl@5067e47[MainActivity]( 4390): ThreadedRenderer.create() translucent=true
06-28 14:20:49.079 D/InputTransport( 4390): Input channel constructed: fd=74
06-28 14:20:49.079 D/ViewRootImpl@5067e47[MainActivity]( 4390): setView = DecorView@279674[MainActivity] touchMode=true
06-28 14:20:49.081 D/ViewRootImpl@5067e47[MainActivity]( 4390): dispatchAttachedToWindow
06-28 14:20:49.093 D/ViewRootImpl@5067e47[MainActivity]( 4390): Relayout returned: oldFrame=[0,0][0,0] newFrame=[36,1062][1404,1593] result=0x27 surface={isValid=true 504091385344} surfaceGenerationChanged=true
06-28 14:20:49.094 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initialize() mSurface={isValid=true 504091385344} hwInitialized=true
06-28 14:20:49.099 D/mali_winsys( 4390): EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [1624x787]-format:1
06-28 14:20:49.099 D/ScrollView( 4390):  onsize change changed 
06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 1
06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initializeIfNeeded()#2 mSurface={isValid=true 504091385344}
06-28 14:20:49.124 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
06-28 14:20:49.141 D/ViewRootImpl@16dc384[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 0
06-28 14:20:49.142 D/SEM_CLIP_SemClipboardManager( 4390): isCocktailBarDisplayed : false

错误消息已更改。 错误 -Synccontext尚未初始化

06-28 14:20:48.971 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 0
06-28 14:20:49.025 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 1
06-28 14:20:49.075 D/ViewRootImpl@5067e47[MainActivity]( 4390): ThreadedRenderer.create() translucent=true
06-28 14:20:49.079 D/InputTransport( 4390): Input channel constructed: fd=74
06-28 14:20:49.079 D/ViewRootImpl@5067e47[MainActivity]( 4390): setView = DecorView@279674[MainActivity] touchMode=true
06-28 14:20:49.081 D/ViewRootImpl@5067e47[MainActivity]( 4390): dispatchAttachedToWindow
06-28 14:20:49.093 D/ViewRootImpl@5067e47[MainActivity]( 4390): Relayout returned: oldFrame=[0,0][0,0] newFrame=[36,1062][1404,1593] result=0x27 surface={isValid=true 504091385344} surfaceGenerationChanged=true
06-28 14:20:49.094 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initialize() mSurface={isValid=true 504091385344} hwInitialized=true
06-28 14:20:49.099 D/mali_winsys( 4390): EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [1624x787]-format:1
06-28 14:20:49.099 D/ScrollView( 4390):  onsize change changed 
06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 1
06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initializeIfNeeded()#2 mSurface={isValid=true 504091385344}
06-28 14:20:49.124 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
06-28 14:20:49.141 D/ViewRootImpl@16dc384[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 0
06-28 14:20:49.142 D/SEM_CLIP_SemClipboardManager( 4390): isCocktailBarDisplayed : false

输出(当我按下按钮时)

06-28 14:20:48.971 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 0
06-28 14:20:49.025 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 1
06-28 14:20:49.075 D/ViewRootImpl@5067e47[MainActivity]( 4390): ThreadedRenderer.create() translucent=true
06-28 14:20:49.079 D/InputTransport( 4390): Input channel constructed: fd=74
06-28 14:20:49.079 D/ViewRootImpl@5067e47[MainActivity]( 4390): setView = DecorView@279674[MainActivity] touchMode=true
06-28 14:20:49.081 D/ViewRootImpl@5067e47[MainActivity]( 4390): dispatchAttachedToWindow
06-28 14:20:49.093 D/ViewRootImpl@5067e47[MainActivity]( 4390): Relayout returned: oldFrame=[0,0][0,0] newFrame=[36,1062][1404,1593] result=0x27 surface={isValid=true 504091385344} surfaceGenerationChanged=true
06-28 14:20:49.094 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initialize() mSurface={isValid=true 504091385344} hwInitialized=true
06-28 14:20:49.099 D/mali_winsys( 4390): EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [1624x787]-format:1
06-28 14:20:49.099 D/ScrollView( 4390):  onsize change changed 
06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 1
06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initializeIfNeeded()#2 mSurface={isValid=true 504091385344}
06-28 14:20:49.124 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
06-28 14:20:49.141 D/ViewRootImpl@16dc384[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 0
06-28 14:20:49.142 D/SEM_CLIP_SemClipboardManager( 4390): isCocktailBarDisplayed : false
这部分是错误的:

    [JsonProperty(PropertyName = "id")]
    public string Id
    {
        get { return Id; }
        set { Id = value; }
    }
您返回的是Id,而Id又返回Id,因此这是一个递归调用。它不能工作


我也同意Sean的观点,即这不是将数据添加到Azure的最佳实践。

您将MainActivity用作数据库模型。你不应该那样做

你应该做什么:

  • 创建数据库表模型:

    public class MyFirstDbTableModel
    {
       // string id;
       public string Id { get; set; }
    
       public string Questions { get; set; }
    
       public bool Complete { get; set; }
    }
    
  • 按如下方式获取表格:

    var table = client.GetTable<MyFirstDbTableModel>();
    
  • 将实例放入Azure中的数据库:

    var inserted = await table.InsertAsync(myFirstModelInstance);
    

  • 注意:必须从后端或直接在数据库中创建数据库表。您可以直接在后端使用“MyFirstDbTableModel”模型,但它必须从

    公共类MyFirstDbTableModel:EntityData{…}

    你还需要做更多的事情,比如创建一个控制器,这在Azure文档中有描述,或者你可以在Azure移动应用快速启动示例中看到


    根据问题的编辑进行更新:

    06-28 14:20:48.971 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 0
    06-28 14:20:49.025 D/ViewRootImpl@16dc384[MainActivity]( 4390): ViewPostImeInputStage processPointer 1
    06-28 14:20:49.075 D/ViewRootImpl@5067e47[MainActivity]( 4390): ThreadedRenderer.create() translucent=true
    06-28 14:20:49.079 D/InputTransport( 4390): Input channel constructed: fd=74
    06-28 14:20:49.079 D/ViewRootImpl@5067e47[MainActivity]( 4390): setView = DecorView@279674[MainActivity] touchMode=true
    06-28 14:20:49.081 D/ViewRootImpl@5067e47[MainActivity]( 4390): dispatchAttachedToWindow
    06-28 14:20:49.093 D/ViewRootImpl@5067e47[MainActivity]( 4390): Relayout returned: oldFrame=[0,0][0,0] newFrame=[36,1062][1404,1593] result=0x27 surface={isValid=true 504091385344} surfaceGenerationChanged=true
    06-28 14:20:49.094 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initialize() mSurface={isValid=true 504091385344} hwInitialized=true
    06-28 14:20:49.099 D/mali_winsys( 4390): EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [1624x787]-format:1
    06-28 14:20:49.099 D/ScrollView( 4390):  onsize change changed 
    06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 1
    06-28 14:20:49.110 D/ViewRootImpl@5067e47[MainActivity]( 4390): mHardwareRenderer.initializeIfNeeded()#2 mSurface={isValid=true 504091385344}
    06-28 14:20:49.124 D/ViewRootImpl@5067e47[MainActivity]( 4390): MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
    06-28 14:20:49.141 D/ViewRootImpl@16dc384[MainActivity]( 4390): MSG_WINDOW_FOCUS_CHANGED 0
    06-28 14:20:49.142 D/SEM_CLIP_SemClipboardManager( 4390): isCocktailBarDisplayed : false
    
    您应该将类名从“Controller”更改为“MyFirstDbTableModelController”。控制器的名称反映在请求链接中

    您应该使用SSMS(SQL Server Management Studio)连接到数据库。使用此程序,您可以查看表是否已创建。注意:只有在向后端发送请求后,才会创建该表

    您不在模型中使用属性,因此,我在步骤3中删除了属性

    您是否更改了Startup.MobileApp.cs中的初始值设定项

    如果您在我的答案中使用代码,它应该与我的更新中的更改一起工作

    如果您遇到异常,请发布stacktrace。此外,您还可以调试后端以获得堆栈跟踪


    注意:如果更改模型,例如MyFirstDbTableModel,数据库将不会再次创建表。您必须删除数据库中的所有表

    谢谢,先生,我意识到了一个巨大的错误。我在后台什么都没做。我以为azure会自动完成所有事情。明天我将尝试创建一个后端(控制器等)。顺便问一下,你可以编辑你的答案。Guid().NewGuid().ToString();而不是Guid.NewGuid().ToString();var myFirstModelInstance=new MyFristDbTableModel();我建议您使用TodoItem快速启动示例,了解后端如何工作以及移动应用程序如何工作。如果你在Azure中创建一个移动应用实例,你可以点击“快速启动”,然后你可以选择你的目标,比如Xamarin.iOS。之后,您必须创建一个SQL数据库等等。。(这是一个循序渐进的过程,你会看到)附言:我已经纠正了错误,谢谢。我已经编辑了我的后端代码并发布了,但仍然有相同的错误。@martloss我已经更新了我的答案。您可以从MainActivity更新代码吗?步骤4:var inserted=wait table.InsertAsync(myFirstModelInstance);这里有一个错误“无法将void分配给隐式类型变量App4”,因此,我仍然使用“wait table.InsertAsync(myFirstModelInstance)”;我将“控制器”更改为“MyFirstDbTableModelController”,然后再次发布。我连接到DB,我可以通过Easy Tables看到之前创建的表。名字是“MyFirstDbTableModel”,我在“startup.mobileapp.cs”问题中添加了这个名字
    public class MyFirstDbTableModel
    {
       // string id;
       public string Id { get; set; }
    
       public string Questions { get; set; }
    
       public bool Complete { get; set; }
    }
    
    var table = client.GetTable<MyFirstDbTableModel>();
    
    var myFirstModelInstance = new MyFirstDbTableModel();
    myFirstModelInstance.Id = Guid.NewGuid().ToString();
    myFirstModelInstance.Questions = "Could I help you with this answer?";
    myFirstModelInstance.Complete = false;
    
    var inserted = await table.InsertAsync(myFirstModelInstance);