改型API不适用于导航抽屉-Android

改型API不适用于导航抽屉-Android,android,retrofit2,navigation-drawer,Android,Retrofit2,Navigation Drawer,我正在使用导航抽屉开发一个Android应用程序。 但改型API不适用于导航抽屉应用程序 当我使用“空活动”创建一个新的Android源代码项目时,改型API正在工作。 但当我使用“导航抽屉活动”创建一个新的Android源代码项目,并添加与以前的源代码项目完全相同的代码时,改型API不起作用 我所做的如下。 (1) 在“选择项目模板”上选择“导航抽屉活动”,创建一个新的Android源项目。(MinSDK:API22-棒棒糖) (2) 在build.gralde(项目)中添加以下代码 分机{

我正在使用导航抽屉开发一个Android应用程序。 但改型API不适用于导航抽屉应用程序

当我使用“空活动”创建一个新的Android源代码项目时,改型API正在工作。 但当我使用“导航抽屉活动”创建一个新的Android源代码项目,并添加与以前的源代码项目完全相同的代码时,改型API不起作用

我所做的如下。 (1) 在“选择项目模板”上选择“导航抽屉活动”,创建一个新的Android源项目。(MinSDK:API22-棒棒糖)

(2) 在build.gralde(项目)中添加以下代码

分机{

}

(3) 在build.gradle(应用程序)中添加2个com.squareup.Reformation库

依赖关系{

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" />