改型API不适用于导航抽屉-Android
我正在使用导航抽屉开发一个Android应用程序。 但改型API不适用于导航抽屉应用程序 当我使用“空活动”创建一个新的Android源代码项目时,改型API正在工作。 但当我使用“导航抽屉活动”创建一个新的Android源代码项目,并添加与以前的源代码项目完全相同的代码时,改型API不起作用 我所做的如下。 (1) 在“选择项目模板”上选择“导航抽屉活动”,创建一个新的Android源项目。(MinSDK:API22-棒棒糖) (2) 在build.gralde(项目)中添加以下代码 分机{ } (3) 在build.gradle(应用程序)中添加2个com.squareup.Reformation库 依赖关系{改型API不适用于导航抽屉-Android,android,retrofit2,navigation-drawer,Android,Retrofit2,Navigation Drawer,我正在使用导航抽屉开发一个Android应用程序。 但改型API不适用于导航抽屉应用程序 当我使用“空活动”创建一个新的Android源代码项目时,改型API正在工作。 但当我使用“导航抽屉活动”创建一个新的Android源代码项目,并添加与以前的源代码项目完全相同的代码时,改型API不起作用 我所做的如下。 (1) 在“选择项目模板”上选择“导航抽屉活动”,创建一个新的Android源项目。(MinSDK:API22-棒棒糖) (2) 在build.gralde(项目)中添加以下代码 分机{
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
~
(4) 在AndroidManifest.xml中添加用户权限和android:usesCleartextTraffic
<uses-permission android:name="android.permission.INTERNET" />
<application
android:usesCleartextTraffic="true"
android:allowBackup="true"
}
(6) 创建一个改型API接口
公共接口{
// Make Retrofit object
public static final RestApi api = new Retrofit.Builder()
.baseUrl(RestApi.BASE_URL)
.addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
.build().create(RestApi.class);
String BASE_URL = "http://110.234.25.90:1330/";
@GET("places")
Call<List<Place>> getPlacesList();
//生成改装对象
public static final RestApi api=new reformation.Builder()
.baseUrl(RestApi.BASE\u URL)
.addConverterFactory(GsonConverterFactory.create())//这里我们使用GsonConverterFactory将json数据直接转换为对象
.build().create(RestApi.class);
字符串BASE_URL=”http://110.234.25.90:1330/";
@获取(“位置”)
调用getPlacesList();
}
(7) 在MainActivity中创建调用改型API函数并使用onCreate()中的函数
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getPlacesList();
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Snackbar.make(查看“替换为您自己的操作”,Snackbar.LENGTH\u LONG)
.setAction(“Action”,null).show();
}
});
抽屉布局抽屉=findViewById(R.id.抽屉布局);
NavigationView NavigationView=findViewById(R.id.nav_视图);
//将每个菜单ID作为一组ID传递,因为每个
//菜单应被视为顶级目的地。
mAppBarConfiguration=新建AppBarConfiguration.Builder(
R.id.nav_主页、R.id.nav_画廊、R.id.nav_幻灯片)
.setDrawerLayout(抽屉)
.build();
NavController NavController=Navigation.findNavController(这个,R.id.nav_主机_片段);
NavigationUI.setupActionBarWithNavController(此、navController、mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView,navController);
}
私有void getPlacesList(){
Call Call=RestApi.api.getPlacesList();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
List placesList=response.body();
如果(placesList!=null){
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
这就是我在源代码和项目中所做的一切。
“空活动”源项目可以正确获取数据,“导航抽屉活动”源项目跳转到onFailure()函数而不是onResponse()函数。
错误消息如下所示。
“java.net.SocketException:套接字失败:EPERM(不允许操作)”
我错过了什么
AndroidManifest.xml
希望这对您有所帮助它奏效了。现在我可以从服务器获取数据了。非常感谢。请通过向上投票,并将此答案标记为回答:)
@SerializedName("id")
@Expose
protected long id;
@SerializedName("x")
@Expose
protected float x;
@SerializedName("y")
@Expose
protected float y;
public Place(long id, float x, float y) {
this.id = id;
this.x = x;
this.y = y;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
// Make Retrofit object
public static final RestApi api = new Retrofit.Builder()
.baseUrl(RestApi.BASE_URL)
.addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
.build().create(RestApi.class);
String BASE_URL = "http://110.234.25.90:1330/";
@GET("places")
Call<List<Place>> getPlacesList();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getPlacesList();
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}
private void getPlacesList() {
Call<List<Place>> call = RestApi.api.getPlacesList();
call.enqueue(new Callback<List<Place>>() {
@Override
public void onResponse(Call<List<Place>> call, Response<List<Place>> response) {
List<Place> placesList = response.body();
if(placesList != null) {
}
}
@Override
public void onFailure(Call<List<Place>> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />