我是android的新手,我正在开发一个Android应用程序。但是我的包行在MainActivity.java类中给出了这个错误。
有谁能告诉我这个的原因?
这是我的类,包行给出了这个错误。
package com.example.eventgyaam;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int counter;
Button add,sub;
TextView display;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
counter = 0;
add = (Button) findViewById(R.id.bAdd);
sub = (Button) findViewById(R.id.bSub);
display = (Button) findViewById(R.id.tvDisplay);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
display.setText("Your total is "+counter);
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter--;
display.setText("Your total is "+counter);
}
});
}
}
首先,介绍一些细节。有 水平 Android API,在每个级别,它们可能会引入新功能 这里。
创建Android应用程序时,您可以指定应用程序运行的最低级别。这是在 manifest
随着 uses-sdk
斯坦扎:见 这里 详情。
因此,如果您使用仅在第11级可用的功能,那么您的代码 惯于 像你指定的那样在8级API上运行。
您必须只使用当前最小值或最小值。
至于为什么你似乎在包装线上得到了错误,并且对于一个看起来似乎不是你向我们展示的源代码的电话,我不能说。因为它在抱怨 android.app.Activity#onCreateView
根据你的头衔,那里 可能 成为观点的一个问题 R.layout.activity_main
这被夸大了 setContentView
。或者它可能是兼容性库本身的问题, 一些不是闻所未闻的东西。
但是,而不是挣扎 太 很难,你可能想要考虑简单地将最小值提高到API-11并删除 appcompat
完全是东西。按照 这里,只有约2%的Android用户早于Android-3.0 / API-11(截至2016年6月)的版本。随着时间的推移,这种情况只会越来越小。
错误:
呼叫需要API级别11(当前最小值为8)
android.app.Activity#onCreateView
如果您查看Activity类的javadoc,您将看到该方法 public View onCreateView (View parent, String name, Context context, AttributeSet attrs)
在API 11中添加了这就是您收到此错误的原因。
要么你必须改变你的 minSdkVersion
从 8
至 11
或者你使用 @SuppressLint("NewApi")
在类声明级别作为变通方法 Activity
喜欢这个:
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
对于 Fragment
:
@SuppressLint("NewApi")
@Override
public void View onCreateView(String name, Context context, AttributeSet attrs) {
@SuppressLint("NewApi")
是Android Lint工具使用的注释。
只要代码中的某些内容不是最佳或可能崩溃,Lint就会告诉您。通过在那里传递NewApi,您将抑制所有警告,告诉您是否使用了在您之后引入的任何API minSdkVersion
编辑:
你也可以使用 @TargetApi(11)
代替 @SuppressLint("NewApi")
。可以找到这些之间的更多差异 这里。
希望能帮助到你!
对于每个Android API,可能会添加新功能,这些功能无法在较低的API版本上运行。因此,要解决此问题,您只需增加项目中所需的最低API即可。
在你的 build.gradle (app-module)
,你会发现这一行:
minSdkVersion 8
将其更改为:
minSdkVersion 11
如果你没有找到这一行 build.gradle
, 检查你的 AndroidManifest.xml
并改变 minSdkVersion
从8到11或任何你想要的:
<uses-sdk
android:minSdkVersion="11" />
但现在你的应用程序只适用于API 11+,这很好。这些天没有人使用下面的API 11,所以它对你来说应该不是问题。
因为API 11中添加的片段和您当前的minSDK = 8,你可以看到 这里
您正在使用AppCompatActivity,它在onCreateView()方法中调用Fragment类,虽然您的代码不实现onCreateView()但AppCompatActivity实现了。你可以阅读源代码 这里
解 有两种可能的解决方案
1-将manifest中的sdk版本更改为> = 11
2-(如果你使用11以下的API)使用SuppressLint注释来抑制与sdkVersion相关的任何错误并实现onCreateView如下
@SuppressLint("NewApi")
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
{
if (Build.VERSION.SDK_INT >= 11)
return super.onCreateView(parent, name, context, attrs);
return null;
}
从manifest.xml更改minsdkversion
<uses-sdk
android:minSdkVersion="11"/>
我遇到了同样的问题,我通过改变活动的超类来解决它。
“公共类MainActivity扩展了AppCompatActivity”,
我输入了“公共类MainActivity extends Activity”。
更改后问题得到解决。
如果您正在使用Eclipse,请右键单击其中一个项目并单击属性,从左侧列表中选择Java Compiler,取消选中“启用项目特定设置”,单击“配置工作区设置”链接,将编译器合规性级别更改为最高版本(目前为止)这是1.8)。
然后单击确定并接受它询问的所有内容。
另外,要确保将所有项目的Project Build Target api更改为最新的api。
编辑:
我个人不得不逐一取消选中所有库项目的“启用项目特定设置”。将编译器合规性工作空间级别更改为1.8,然后仅为我自己的主项目选中“启用项目特定设置”,并将其编译器合规性级别更改为1.6。