首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从api获取数据可与https api配合使用,但不能与http api配合使用

从api获取数据可与https api配合使用,但不能与http api配合使用
EN

Stack Overflow用户
提问于 2019-05-28 10:17:55
回答 1查看 50关注 0票数 1

我正在开发一个应用程序,我不得不发出一个API请求并在RecyclerView中显示数据(为此我使用了改进)。当我完成代码时,我发现使用HTTPS APIs可以很好地获取数据,但是当我在我的BASE_URL中放置一个HTTP API时,它就不起作用了。

下面的API可以很好地使用它:https://demonuts.com/Demonuts/JsonTest/Tennis/json_parsing.php

但是使用HTTP API时,输出不会显示出来。

MainActivity

代码语言:javascript
运行
AI代码解释
复制
package com.example.parsaniahardik.json_recycler_retrofit;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.scalars.ScalarsConverterFactory;

public class MainActivity extends AppCompatActivity {

    private RetrofitAdapter retrofitAdapter;
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recycler);

        fetchJSON();

    }

    private void fetchJSON(){

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(RecyclerInterface.JSONURL)
                .addConverterFactory(ScalarsConverterFactory.create())
                .build();

        RecyclerInterface api = retrofit.create(RecyclerInterface.class);

        Call<String> call = api.getString();

        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                Log.i("Responsestring", response.body().toString());
                //Toast.makeText()
                if (response.isSuccessful()) {
                    if (response.body() != null) {
                        Log.i("onSuccess", response.body().toString());

                        String jsonresponse = response.body().toString();
                        writeRecycler(jsonresponse);

                    } else {
                        Log.i("onEmptyResponse", "Returned empty response");//Toast.makeText(getContext(),"Nothing returned",Toast.LENGTH_LONG).show();
                    }
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

            }
        });
    }

    private void writeRecycler(String response){

        try {
            //getting the whole json object from the response
            JSONObject obj = new JSONObject(response);
            if(obj.optString("status").equals("true")){

                ArrayList<ModelRecycler> modelRecyclerArrayList = new ArrayList<>();
                JSONArray dataArray  = obj.getJSONArray("data");

                for (int i = 0; i < dataArray.length(); i++) {

                    ModelRecycler modelRecycler = new ModelRecycler();
                    JSONObject dataobj = dataArray.getJSONObject(i);

                    modelRecycler.setName(dataobj.getString("name"));
                    modelRecycler.setCountry(dataobj.getString("country"));
                    modelRecycler.setCity(dataobj.getString("city"));

                    modelRecyclerArrayList.add(modelRecycler);

                }

                retrofitAdapter = new RetrofitAdapter(this,modelRecyclerArrayList);
                recyclerView.setAdapter(retrofitAdapter);
                recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));

            }else {
                Toast.makeText(MainActivity.this, obj.optString("message")+"", Toast.LENGTH_SHORT).show();
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

适配器

代码语言:javascript
运行
AI代码解释
复制
public class RetrofitAdapter extends RecyclerView.Adapter<RetrofitAdapter.MyViewHolder> {

    private LayoutInflater inflater;
    private ArrayList<ModelRecycler> dataModelArrayList;

    public RetrofitAdapter(Context ctx, ArrayList<ModelRecycler> dataModelArrayList){

        inflater = LayoutInflater.from(ctx);
        this.dataModelArrayList = dataModelArrayList;
    }

    @Override
    public RetrofitAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = inflater.inflate(R.layout.retro_item, parent, false);
        MyViewHolder holder = new MyViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(RetrofitAdapter.MyViewHolder holder, int position) {


        holder.name.setText(dataModelArrayList.get(position).getName());
        holder.country.setText(dataModelArrayList.get(position).getCountry());
        holder.city.setText(dataModelArrayList.get(position).getCity());
    }

    @Override
    public int getItemCount() {
        return dataModelArrayList.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        TextView country, name, city;


        public MyViewHolder(View itemView) {
            super(itemView);

            country = (TextView) itemView.findViewById(R.id.country);
            name = (TextView) itemView.findViewById(R.id.name);
            city = (TextView) itemView.findViewById(R.id.city);
    }

    }
}

ApiInterface

代码语言:javascript
运行
AI代码解释
复制
public interface RecyclerInterface {

    String JSONURL = "https://demonuts.com/Demonuts/JsonTest/Tennis/";

    @GET("json_parsing.php")
    Call<String> getString();
}

ModelClass

代码语言:javascript
运行
AI代码解释
复制
public class ModelRecycler {

    private String name, country, city;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

我希望我的API fetch能同时与HTTPS APIsHTTP APIs一起工作。

EN

回答 1

Stack Overflow用户

发布于 2019-05-28 14:12:19

解决:正如@DEVV911所提到的,如果你在Android 9(Pie)上测试应用程序,就会遇到这个问题。如果你遇到同样的问题,那么只需在res文件夹中创建一个新的Android资源目录,并将其命名为" XML“,资源类型为XML。在" XML“文件夹中创建一个新的XML资源文件,命名为"network_security_config”。在其中键入以下内容

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">YourDomainName.com</domain>
    </domain-config>
</network-security-config>

在此之后,转到清单文件并在应用程序标记类型中:

代码语言:javascript
运行
AI代码解释
复制
<android:networkSecurityConfig="@xml/network_security_config"

然后它就可以正常工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56339974

复制
相关文章
Apache编译后无法正常工作
因为某个场景的需求,要在一个国产系统Rocky4.2(国产凝思4.2操作系统)上安装Apache,虽说此系统是基于Redhat 5.8开发的,但是发现yum安装源包管理,RPM命令倒是能用,但是底层依赖完全没有,这就尴尬了,so,只能源码编译安装了。
后场技术
2020/09/03
2.9K0
K3组件kdsvrmgr无法正常工作
1.在服务器上创建一个用户名和口令,和客户端登陆的用户名和口令一致的;  2.通过网上邻居访问服务器,如果没有提示输入用户和密码,那么网络没问题;  3.看COM+和DTC服务有没有设置好;  4.是XP sp3系统或Home系统的话,可能不稳定;  5.再者看感染病毒没有。 。
py3study
2020/01/08
4.7K0
vue在IE下无法正常工作,Promise未定义?
用vue写了一个日历组件,在Firefox、Edge、Chrome以及360等浏览器极速模式中运行一切正常,如图:
Yiiven
2022/12/15
4.3K0
vue在IE下无法正常工作,Promise未定义?
为什么redis哨兵集群只有2个节点无法正常工作?
由于redis的响应速度快,每秒支持的并发极高(号称10万),现在redis越来越流行了
JAVA葵花宝典
2019/11/08
7.9K1
安装ElasticSearch无法正常启动
在用docker安装 ElasticSearch 时,能正常创建容器,返回容器ID,但却无法正常启动,使用浏览器访问 127.0.0.1:9200 时无法访问,使用 docker logs 查看错误日志,发现报了两个错:bootstrap checks failed,下面分别是这两个错误的解决方法。
子润先生
2021/06/23
3.8K0
安装ElasticSearch无法正常启动
在用docker安装 ElasticSearch 时,能正常创建容器,返回容器ID,但却无法正常启动,使用浏览器访问 127.0.0.1:9200 时无法访问,使用 docker logs 查看错误日志,发现报了两个错:bootstrap checks failed,下面分别是这两个错误的解决方法。
Petrochor
2022/06/07
3.2K0
安装ElasticSearch无法正常启动
jira无法正常显示图片
jira安装之后,图片在富文本编辑器内能正常显示,但是在附件内无法显示,如果查看会发现图片的连接是127.0.0.1.
obaby
2023/02/23
2.6K0
jira无法正常显示图片
树莓派鼓捣记 - 4b 安装 wiringPi 无法正常运行
通过命令 sudo apt-get install wiringPi 安装,执行命令 gpio readall无法正常运行,是因为安装的版本不支持4b,最新版目前已经支持
晓晨
2020/11/06
1.9K0
正常的工作流程
修改文件,将它们更新的内容添加到索引中。 $ git add file1 file2 file3 你现在为commit做好了准备,你可以使用git diff命令再加上–cached参数,看看哪些文件将被提交(commit)。 (如果没有–cached参数,git diff会显示当前你所有已做的但没有加入到索引里的修改。)你也可以使用git status命令来获得当前项目的一个状况。
用户3004328
2018/09/06
7900
NSTimer 导致UIViewController无法正常释放
原因:当我们使用NSTimer的方法时,定时器对象会对它的target(即self:当前控制器)持有强引用,如果定时器不销毁,则控制器无法释放。
赵哥窟
2018/12/12
1.1K0
jsp无法正常加载CSS样式
今天写项目时,发现jsp页面不能加载css样式 检查css和引入代码都没有问题,重启eclipse和tomcat都没有解决 在浏览器中F12调试查看css文件都没有问题。 后来百度寻找解决方法,终于找
白胡杨同学
2020/04/17
4.2K0
jsp无法正常加载CSS样式
ubuntu下无法正常启动eclipse
最近用SpringMVC+Freemarker+AJAX作了个例子.遇到了一些关于中文编码的问题.通过查资料把问题解决了. 在这里总结一下.
EltonZheng
2021/01/26
1.1K0
小程序<live-pusher>、<live-player>标签无法正常使用?
出于政策和合规的考虑,微信暂时没有放开所有小程序对 <live-pusher> 和 <live-player> 标签的支持:
hhualiu
2019/03/11
2.3K0
小程序<live-pusher>、<live-player>标签无法正常使用?
pip无法正常使用解决办法
python -m pip install xxx 相当于import,叫做当做模块来启动
一点儿也不潇洒
2018/08/07
1.1K0
mongos崩溃后无法重启的问题
从上次重启config节点,或者重新选举90或180天后,所有mongos会同时crash,并且无法重新启动。
MongoDB中文社区
2021/03/01
1.3K0
centos7无法正常启动network
当我们执行systemctl restart network时出以下报错 image.png 解决方法:直接关闭 NetworkManger 服务就好了 systemctl stop NetworkManger
云计算小黑
2021/06/16
1.1K0
Crontab脚本无法正常执行问题
Crontab执行时若有异常首先要到/var/log下查看cron日志文件文件(vi /var/log/cron),也可以使用用tail -f /var/spool/mail/root 查看最近的crontab执行情况。通常在日志中能够查看到异常都是脚本写的不正确导致的,可以手动执行看下具体原因。若在日志中看到脚本正常执行,但是无正确的预期结果,则无非是两种原因:
我是李超人
2020/08/21
2.2K0
点击加载更多

相似问题

Django模板标签可以像Django模板可调用一样使用吗?

124

从django模板标签调用python函数

30

Django -使用模板标签和'with'?

30

Django模板标签

10

Django模板标签

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档