【问题标题】:Can anyone show me how to read this JSON in specified URL [closed]谁能告诉我如何在指定的 URL 中读取这个 JSON [关闭]
【发布时间】:2014-05-08 05:48:47
【问题描述】:

我一直在这个 URL 中阅读这个 json 文件。我在网上尝试了很多示例,但无法读取此 URL 中的特定 json 文件

[https://203.177.52.163:1985/restgateway/services/ws_download/Book/3372/Plant/03/User/12334]. Please help me what is wrong with this. Thank you for your help.

//这是我的代码示例..

包com.hmkcode.android; 导入 java.io.BufferedReader; 导入 java.io.IOException; 导入 java.io.InputStream; 导入 java.io.InputStreamReader; 导入 org.apache.http.HttpResponse; 导入 org.apache.http.client.HttpClient; 导入 org.apache.http.client.methods.HttpGet; 导入 org.apache.http.impl.client.DefaultHttpClient; 导入 android.net.ConnectivityManager; 导入android.net.NetworkInfo; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入android.util.Log; 导入 android.widget.EditText; 导入 android.widget.TextView; 导入 android.widget.Toast; 导入android.app.Activity; 公共类 MainActivity 扩展 Activity { EditText etResponse; TextView tvIsConnected; @覆盖 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取对视图的引用 etResponse = (EditText) findViewById(R.id.etResponse); tvIsConnected = (TextView) findViewById(R.id.tvIsConnected); // 检查是否连接 如果(isConnected()){ tvIsConnected.setBackgroundColor(0xFF00CC00); tvIsConnected.setText("您已连接"); } 别的{ tvIsConnected.setText("你没有连接"); } // 调用 AsynTask 在单独的线程上执行网络操作 //new HttpAsyncTask().execute("http://hmkcode.appspot.com/rest/controller /get.json"); new HttpAsyncTask().execute("https://203.177.52.163:1985/restgateway/services/ws_download/Book/3372/Plant/03/User/12334"); } 公共静态字符串 GET(字符串 url){ 输入流 inputStream = null; 字符串结果 = ""; 尝试 { // 创建 HttpClient HttpClient httpclient = new DefaultHttpClient(); // 向给定的 URL 发出 GET 请求 HttpResponse httpResponse = httpclient.execute(new HttpGet(url)); // 接收响应作为 inputStream inputStream = httpResponse.getEntity().getContent(); // 将输入流转换为字符串 如果(输入流!= null) 结果 = convertInputStreamToString(inputStream); 别的 结果 = "没有工作!"; } 捕捉(异常 e){ Log.d("InputStream", e.getLocalizedMessage()); } 返回结果; } 私有静态字符串 convertInputStreamToString(InputStream inputStream) 抛出 IOException{ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 字符串行 = ""; 字符串结果 = ""; while((line = bufferedReader.readLine()) != null) 结果 += 行; inputStream.close(); 返回结果; } 公共布尔isConnected(){ ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) 返回真; 别的 返回假; } 私有类 HttpAsyncTask 扩展 AsyncTask { @覆盖 受保护的字符串doInBackground(字符串... urls){ 返回 GET(urls[0]); } // onPostExecute 显示 AsyncTask 的结果。 @覆盖 protected void onPostExecute(String result) {在此处输入代码 Toast.makeText(getBaseContext(), "收到!", Toast.LENGTH_LONG).show(); etResponse.setText(结果); } } }

这是我的 activity_main.XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

   <TextView
        android:id="@+id/tvIsConnected"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"    
        android:background="#FF0000"
        android:textColor="#FFF"
        android:textSize="18dp"
        android:layout_marginBottom="5dp"
        android:text="is connected? " />

    <EditText
        android:id="@+id/etResponse"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:ems="10"
        android:layout_marginTop="10dp"
        android:inputType="textMultiLine" >\
        <requestFocus />
    </EditText>
</LinearLayout>

这段代码可以使用这个网址

new HttpAsyncTask().execute("http://hmkcode.appspot.com/rest/controller  /get.json");

但如果我将其更改为这个网址

new HttpAsyncTask().execute("https://203.177.52.163:1985/restgateway/services/ws_download/Book/3372/Plant/03/User/12334");

各位,我想知道这是不是服务器问题?或者这只是此代码的错误。提前致谢。

【问题讨论】:

  • 你试过吗?周围有大量 Android 读取 JSON 的示例。
  • 正在读取 JSON.. 你被困在获取 json 响应或解析 JSON 响应?请解释

标签: android json


【解决方案1】:

我的猜测是您尝试连接到自签名 HTTPS 网站。这意味着您的证书不“正确”(由知名公司认证)。因此,android 可能会阻止这个请求,说“SSL 对等证书不正确”之类的。

如果我的猜测是正确的,我会将您重定向到这个问题:Self-signed certificate and loopj for Android 并且接受的答案对我来说似乎非常正确。

试试看,如果有帮助,告诉我!

【讨论】:

  • Tnx.. 你是绝对正确的......我已经让它工作了。 Tnx..
  • 那么我鼓励你接受这个答案,这样如果有人提出类似的问题,他会更容易;)
最近更新 更多