首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果网络可用,则从服务器获取JSON

如果网络可用,则从服务器获取JSON
EN

Stack Overflow用户
提问于 2020-02-10 07:59:50
回答 3查看 78关注 0票数 0

如何从互联网上加载变量为负值的文件,以及从手机上加载具有正值的文件?

它应该是这样工作的:

我的系统会检查是否有互联网

如果不是,则从内存加载

如果有,则从站点url加载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String getJSONFromAssets(Context context) {
        String json = null;
        try {
            InputStream inputData = context.getAssets().open("data.json"); //load assets file
            //Log.e("100rad", ":"+inputData);
            int size = inputData.available();
            byte[] buffer = new byte[size];
            inputData.read(buffer);
            inputData.close();
            json = new String(buffer, "UTF-8");
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;
    }
    private class AsyncTaskGetMareker extends AsyncTask<String , String, JSONArray> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected JSONArray doInBackground(String... strings) {
            String stationsJsonString = getJSONFromAssets(MainActivity.this);
            try {
                JSONArray stationsJsonArray = new JSONArray(stationsJsonString);
                return stationsJsonArray;
            } catch (JSONException e) {
                e.printStackTrace();
            }
            //This will only happen if an exception is thrown above:
            return null;
        }

        protected void onPostExecute (JSONArray result){
            if (result !=null){
                for (int i =0; i <result.length(); i++){
                    JSONObject jsonObject= null;
                    try {
                        jsonObject= result.getJSONObject(i);
                        String name=jsonObject.getString("store_name");
                        String lat=jsonObject.getString("latitude");
                        String lang=jsonObject.getString("longitude");
                        String desc=jsonObject.getString("store_desc");
                        String oxr=jsonObject.getString("telephone");
                        String sost=jsonObject.getString("keywords");
                        int cat=jsonObject.getInt("category_id");
                        int id=jsonObject.getInt("id");
} catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-10 10:33:38

下面是JSONParser类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import android.util.Log;

import org.json.JSONException;
import org.json.JSONObject;

 import java.io.BufferedInputStream;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLEncoder;
 import java.util.HashMap;

 public class JSONParser {

String charset = "UTF-8";
HttpURLConnection conn;
DataOutputStream wr;
StringBuilder result;
URL urlObj;
JSONObject jObj = null;
StringBuilder sbParams;
String paramsString;

public JSONObject makeHttpRequest(String url, String method,
                                  HashMap<String, String> params) {

    sbParams = new StringBuilder();
    int i = 0;
    for (String key : params.keySet()) {
        try {
            if (i != 0){
                sbParams.append("&");
            }
            sbParams.append(key).append("=")
                    .append(URLEncoder.encode(params.get(key), charset));

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        i++;
    }

    if (method.equals("POST")) {
        // request method is POST
        try {
            urlObj = new URL(url);

            conn = (HttpURLConnection) urlObj.openConnection();

            conn.setDoOutput(true);

            conn.setRequestMethod("POST");

            conn.setRequestProperty("Accept-Charset", charset);

            conn.setReadTimeout(10000);
            conn.setConnectTimeout(15000);

            conn.connect();

            paramsString = sbParams.toString();

            wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(paramsString);
            wr.flush();
            wr.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    else if(method.equals("GET")){
        // request method is GET

        if (sbParams.length() != 0) {
            url += "?" + sbParams.toString();
        }

        try {
            urlObj = new URL(url);

            conn = (HttpURLConnection) urlObj.openConnection();

            conn.setDoOutput(false);

            conn.setRequestMethod("GET");

            conn.setRequestProperty("Accept-Charset", charset);

            conn.setConnectTimeout(15000);

            conn.connect();

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

    }

    try {
        //Receive the response from the server
        InputStream in = new BufferedInputStream(conn.getInputStream());
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        result = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            result.append(line);
        }

        Log.d("JSON Parser", "result: " + result.toString());

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

    conn.disconnect();

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(result.toString());
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON Object
    return jObj;
}}
票数 1
EN

Stack Overflow用户

发布于 2020-02-10 08:52:36

您可以通过以下代码检查您的移动设备是否连接到互联网。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ConnectionDetector
{
private Context _context;
public ConnectionDetector(Context context)
{
    this._context = context;
}
public  boolean isConnectingToInternet()
{
    ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null)
    {
        NetworkInfo info = connectivity.getActiveNetworkInfo();
        if (info != null)
        {
            if (info.getType() == ConnectivityManager.TYPE_WIFI)
            {
                return true;
            }
            else if (info.getType() == ConnectivityManager.TYPE_MOBILE)
            {
                return true;
            }
        }
        else
        {
            // not connected to the internet
            return false;
        }
    }
    return false;
}}

您的AsyncTask类代码将类似于下面的代码,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private class AsyncTaskGetMareker extends AsyncTask<String , String, JSONArray> 
 {
@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected JSONArray doInBackground(String... strings) {
     JSONArray stationsJsonArray;
    String stationsJsonString = getJSONFromAssets(MainActivity.this);
    try {
         if(new ConnectionDetector().isConnectionToInternet())
         {
            Hashmap<String,String> mapToSend = new Hashmap();
         JSONParser jsonParser = new JSONParser();

          stationsJsonArray = jsonParser.makeHttpRequest("URL", "POST", mapToSend);

         }else{
           stationsJsonArray = new JSONArray(stationsJsonString);
         }

        return stationsJsonArray;
    } catch (JSONException e) {
        e.printStackTrace();
    }
    //This will only happen if an exception is thrown above:
    return null;
}

protected void onPostExecute (JSONArray result){
    if (result !=null){
        for (int i =0; i <result.length(); i++){
            JSONObject jsonObject= null;
            try {
                jsonObject= result.getJSONObject(i);
                String name=jsonObject.getString("store_name");
                String lat=jsonObject.getString("latitude");
                String lang=jsonObject.getString("longitude");
                String desc=jsonObject.getString("store_desc");
                String oxr=jsonObject.getString("telephone");
                String sost=jsonObject.getString("keywords");
                int cat=jsonObject.getInt("category_id");
                int id=jsonObject.getInt("id");
         } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

}

票数 1
EN

Stack Overflow用户

发布于 2020-02-10 08:59:32

您还可以添加此检查

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static boolean isNetworkAvailable(Context con) {
        try {
            ConnectivityManager cm = (ConnectivityManager) con
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = cm.getActiveNetworkInfo();

            if (networkInfo != null && networkInfo.isConnected()) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

然后在您的活动/片段中检查这一点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (isNetworkAvailable)
{
//Do you task
//callAPI(); fetch data from website / api call
}
else{
/*No internet so, load from memory */
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60146231

复制
相关文章
【头条】如何隐藏页面中的某个元素
透明度为0,仍在文档流中,当作用于其上的事件(如点击)无效,这也是 visibility:hidden 与 opacity: 0 的区别
山月
2021/04/07
3.2K0
【头条】如何隐藏页面中的某个元素
元素的显示与隐藏
在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是 display visibility 和 overflow。
星辰_大海
2020/09/30
4.4K0
用 CSS 隐藏页面元素
用 CSS 隐藏页面元素有许多种方法。你可以将 opacity 设为 0、将 visibility 设为 hidden、将 display 设为 none 或者将 position 设为 absolute 然后将位置设到不可见区域。
全栈程序员站长
2022/08/09
1.6K0
​隐藏404页面中nginx版本信息
兮动人
2023/09/03
8000
demo2动态加载显示商品详情页
/* 要求:实现 头像+昵称(多余7位用...)           商品图片(根据商品实际的图片的大小进行动态的展示。按照一定的比例进行展示。)           产品简介。产品简介在商品图片的下边。并跟随商品图片的大小进行动态的收缩或者是展示。 考虑:实现功能之后,是否要做占位图 进行图片的占位??! */ 难点:动态的加载。 实现:首先创建ui 然后请求数据 最后在主线程进行赋值 并且刷新ui 即可实现。 // // ACShowDetailVC.m // demo2详情动态加载展开
用户1219438
2018/02/01
7170
demo2动态加载显示商品详情页
JQuery 隐藏和显示html元素
$(function(){ $("#bubmitBtn").click(function(){ //首先需要把提示标签全部隐藏掉 $("#nameInvalid").hide(); $("#emailInvalid").hide(); $("#pwdInvalid1").hide(); $("#pwdInvalid2").hide(); //检查用户名: 长度为6到12位, 只能输入数字和英文和下划线 //alert("--"); var $nameEle = $("#UcenterMember_account"); var reg = /^\w{6,12}$/; if(!reg.test($nameEle.val())) { $("#nameInvalid").text(" *用户名长度为6到12位, 只能输入数字和英文和下划线"); $("#nameInvalid").show(); //alert("用户名长度为6到12位, 只能输入数字和英文和下划线"); $nameEle[0].focus(); return false; } //邮箱格式必须正确, 可以不输入 var $emailEle = $("#UcenterMember_email"); reg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if($emailEle.val()!="" && !reg.test($emailEle.val())) { $emailEle[0].focus(); $("#emailInvalid").text(" *邮箱格式不正确!"); $("#emailInvalid").show(); //alert("邮箱格式不正确!"); return false; } //检查密码: 长度为6位, 只能输入数字和英文 var $passwordEle = $("#UcenterMember_password1"); reg = /^[a-zA-Z0-9]{6,15}$/; if(!reg.test($passwordEle.val())) { $("#pwdInvalid1").text(" *密码的最低长度为6位, 只能输入数字和英文"); $("#pwdInvalid1").show(); //alert("密码的长度为6位, 只能输入数字和英文"); $passwordEle[0].focus(); return false; } //确认密码必须与密码相同 var $password2Ele= $("#UcenterMember_password2"); if($password2Ele.val()!=$passwordEle.val()) { $password2Ele[0].focus(); $("#pwdInvalid2").text(" *确认密码必须与密码相同"); $("#pwdInvalid2").show(); //alert("确认密码必须与密码相同"); } return true; }); });
wust小吴
2019/07/05
9.3K0
CSS篇(005)-在页面上隐藏元素的方法有哪些?
-(1)使用 display:none;隐藏元素,渲染树不会包含该渲染对象,因此该元素不会在页面中占据位置,也不会响应绑定的监听事件。
齐丶先丶森
2022/05/12
6220
【黄啊码】微信小程序页面加载闪烁问题|wx:if=““导致先显示后隐藏的闪烁问题
先用一个变量让其隐藏,当从接口中获得数据的时候,在把这个 show 设置成 true 。这样出来的效果就是,内容逐渐在显示,依次显示。从而看不到闪烁再隐藏。 代码如下:
黄啊码
2022/01/09
1.4K0
【CSS】元素显示与隐藏 ( display 隐藏对象 | visibility 隐藏对象 | overflow 隐藏对象 )
设置 display: block 可以显示元素 , 同时该样式还可以将元素转为块元素 ;
韩曙亮
2023/04/16
5.5K0
【CSS】元素显示与隐藏 ( display 隐藏对象 | visibility 隐藏对象 | overflow 隐藏对象 )
iframe页面点击页面其它地方隐藏某元素
<a href="javascript:;" id="showOrHide"></a> <!-- 注意此处的$()不是jquery 是document.getElementById()封装为方法 --> <div id="show-or-hide"> <a href="javascript:$('show-or-hide').style.display='none';parent.location.href='/auth/login'">切换账号</a> <a style="font-size: 12
李磊
2019/08/10
2K0
Rn页面滚动显示隐藏head动画
明知山
2023/10/03
2360
Rn页面滚动显示隐藏head动画
分享 8 种在 CSS 中隐藏元素的方法
作为 Web 开发人员,我们经常遇到需要隐藏网页上的元素的情况。在本文中,我们将分享8 种在 CSS 中隐藏元素的方法,每种方法都有优点和注意事项。
前端达人
2023/08/31
3160
分享 8 种在 CSS 中隐藏元素的方法
WordPress底部显示页面加载时间
效果预览 方法 1.将以下代码加入到主题的functions.php中 //页面加载时间自动检测 function wp_page_speed() { date_default_tim
回忆大大
2021/08/09
1.7K0
WordPress底部显示页面加载时间
WordPress底部显示页面加载时间
本文最后更新于2021年1月22日,已超过1年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
回忆大大
2023/03/08
1.5K0
WordPress底部显示页面加载时间
元素隐藏与显示属性及操作方式
浏览器对其渲染可是不可见,它在网页中占位置却不可点击,也就是说明元素不可见却仍然占据空间。
岳泽以
2022/10/26
1.6K0
元素隐藏与显示属性及操作方式
用 CSS 隐藏页面元素的 5 种方法
用 CSS 隐藏页面元素有许多种方法。你可以将 opacity 设为 0、将 visibility 设为 hidden、将 display 设为 none 或者将 position 设为 absolute 然后将位置设到不可见区域。
疯狂的技术宅
2019/03/28
2K0
点击加载更多

相似问题

初始页面加载后在页面上显示动态项

11

隐藏元素显示后未正确加载

12

在页面加载时隐藏或显示动态目标html元素的最佳方法?

30

在页面加载之前显示加载器元素,然后将其隐藏

13

在页面加载后立即再次加载页

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文