Java 使用Android应用程序在Azure中保存数据时出现安全错误

Java 使用Android应用程序在Azure中保存数据时出现安全错误,java,android,azure,azure-mobile-services,Java,Android,Azure,Azure Mobile Services,显然这是一个安全问题,但从网站下载的示例正确运行(ToDo),我的应用程序更简单,无法运行,因为我真的不明白,我检查了库、宣言、代码,所有内容似乎都是正确的。我做错了什么? 我之前有一个关于这个问题的开放性问题,但现在我认为我可以最好地描述这个问题 错误:未经授权 完全错误: 活动中的错误 com.microsoft.windowsazure.mobileservices.MobileServiceException:处理请求时出错。 位于com.microsoft.windowsazure.m

显然这是一个安全问题,但从网站下载的示例正确运行(ToDo),我的应用程序更简单,无法运行,因为我真的不明白,我检查了库、宣言、代码,所有内容似乎都是正确的。我做错了什么? 我之前有一个关于这个问题的开放性问题,但现在我认为我可以最好地描述这个问题

错误:未经授权

完全错误: 活动中的错误 com.microsoft.windowsazure.mobileservices.MobileServiceException:处理请求时出错。 位于com.microsoft.windowsazure.mobileservices.MobileServiceConnection$1.onNext 在com.microsoft.windowsazure.mobileservices.MobileServiceClient$4.handleRequest上 位于com.microsoft.windowsazure.mobileseservices.mobileseserviceconnection.start 位于com.microsoft.windowsazure.mobileservices.RequestAsyncTask.doInBackground 位于com.microsoft.windowsazure.mobileservices.RequestAsyncTask.doInBackground 在android.os.AsyncTask$2.0调用 在java.util.concurrent.FutureTask$Sync.innerRun 在java.util.concurrent.FutureTask.run 在android.os.AsyncTask$SerialExecutor$1.run 位于java.util.concurrent.ThreadPoolExecutor.runWorker 位于java.util.concurrent.ThreadPoolExecutor$Worker.run 在java.lang.Thread.run 原因:com.microsoft.windowsazure.mobileservices.MobileServiceException: 代码:401,“错误”:“错误:未经授权”} 位于com.microsoft.windowsazure.mobileservices.MobileServiceConnection$1.onNext

我的下载代码:

package com.bn7.rota;
导入java.net.MalformedURLException;
导入com.bn7.rota.Item;
导入com.microsoft.windowsazure.mobileservices.*;
导入android.os.Bundle;
导入android.app.Activity;
导入android.util.Log;
导入android.view.Menu;
公共类MainActivity扩展了活动{
私人移动服务客户机mClient;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
试一试{
mClient=新的MobileServiceClient(
"https://bn7.azure-mobile.net/", 
“hCzcrsFYhkGmxPvQDNxyqBXjZwjXlK99”,
这
);
项目=新项目();
item.IdPhone=“Awesome item”;
item.DateTimePhone=“2013/04/02 08:27:32”;
item.LatitudePhone=-43;
item.LongetudePhone=-23;
item.Active=false;
mClient.getTable(Item.class).insert(Item,newTableOperationCallback()){
未完成公共无效(项实体、异常、ServiceFilterResponse响应){
如果(异常==null){
//插入成功
}否则{
//插入失败
Log.d(“插入失败”,“*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*”;
Log.d(“插入失败”,“活动中出错”,异常);
Log.d(“插入失败”,“*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*”;
} 
} 
});
}捕获(格式错误){
d(“MalformedURLException”,例如toString());
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.activity\u主菜单);
返回true;
}
}
包com.bn7.rota;
公共类项目{
公共int Id;
公共字符串IdPhone;
公共字符串日期时间电话;
公共双纬度电话;
公共双长途电话;
公共布尔活动;
}

您收到的未经授权的错误表明您没有权限在表上执行操作。如果您的操作权限(在门户中)设置为“具有应用程序密钥的任何人”,则您发送的应用程序密钥不正确。如果设置为“仅经过身份验证的用户”“,您需要是经过身份验证的用户(使用移动服务)才能使其工作。如果设置为“仅脚本和管理员”,则您必须在标题中发送主密钥,或者从其他脚本访问表。

确保身份验证/授权已关闭

package com.bn7.rota;
import java.net.MalformedURLException;

import com.bn7.rota.Item;
import com.microsoft.windowsazure.mobileservices.*;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {
    private MobileServiceClient mClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
             mClient = new MobileServiceClient( 
                    "https://bn7.azure-mobile.net/", 
                    "hCzcrsFYhkGmxPvQDNxyqBXjZwjXlK99", 
                    this 
                    );
            Item item = new Item(); 
            item.IdPhone = "Awesome item"; 
            item.DateTimePhone = "2013/04/02 08:27:32"; 
            item.LatitudePhone = -43; 
            item.LongetudePhone = -23; 
            item.Active = false; 
            mClient.getTable(Item.class).insert(item, new TableOperationCallback<Item>() {
                 public void onCompleted(Item entity, Exception exception, ServiceFilterResponse response) { 
                    if (exception == null) { 
                         // Insert succeeded 
                                            } else { 
                         // Insert failed
                        Log.d("Insert failed", "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
                        Log.d("Insert failed", "Error in activity", exception);  
                        Log.d("Insert failed", "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
                    } 
                 } 
            });
        } catch (MalformedURLException e) {
            Log.d("MalformedURLException", e.toString());
        }
}


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
package com.bn7.rota;

public class Item { 
    public int Id; 
    public String IdPhone;
    public String DateTimePhone;
    public double LatitudePhone;
    public double LongetudePhone;
    public boolean Active;
    }

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bn7.rota"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="17" />
        <uses-permission android:name="android.permission.INTERNET" />
        <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.bn7.rota.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>