2017-10-28 61 views
0

我正在关注在Android中关于Rest API的this教程。我做了本视频中的所有内容,但没有收到任何数据,因为我已经更改了链接,但我没有收到任何数据。这里是我的代码:REST API - 不显示任何内容

public class MainActivity extends AppCompatActivity { 

    private TextView value; 

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

     value = (TextView) findViewById(R.id.textView); 

     Button btn = (Button) findViewById(R.id.button); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       new JSONTask().execute("https://jsonparsingdemo-cec5b.firebaseapp.com/jsonData/moviesDemoItem.txt"); 
      } 
     });  
    } 

    public class JSONTask extends AsyncTask<String, String, String>{ 

     @Override 
     protected String doInBackground(String... urls) { 

      HttpURLConnection connection = null; 
      BufferedReader reader = null; 

      try { 
       URL url = new URL(urls[0]); 
       connection = (HttpURLConnection) url.openConnection(); 
       connection.connect(); 

       InputStream stream = connection.getInputStream(); 
       reader = new BufferedReader(new InputStreamReader(stream)); 
       StringBuffer buffer = new StringBuffer(); 
       String line =""; 
       while ((line = reader.readLine()) != null){ 
        buffer.append(line); 
       } 
       // to bedzie wyswietlone 

       String finalJson = buffer.toString(); 
       JSONObject parentObject = new JSONObject(finalJson); 
       JSONArray parrentArray = parentObject.getJSONArray("movies"); 

       JSONObject finalObject = parrentArray.getJSONObject(0); 
       String movieName = finalObject.getString("movie"); 
       int movieYear = finalObject.getInt("year"); 

       return movieName; 

      }catch (MalformedURLException e){ 
       e.printStackTrace(); 
      } catch (IOException e){ 
       e.printStackTrace(); 
      } finally { 
       if(connection != null) { 
        connection.disconnect(); 
       } 
       try { 
        if(reader != null) { 
         reader.close(); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       return null; 

      } 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      value.setText(result); 
     } 
    } 

} 

我是Android的初学者,请不要说我应该从容易开始。我正在为我的Django项目做这件事,我想为它创建移动应用程序。非常感谢您的帮助!

+0

我试图调试您的应用程序,它似乎只要行'connection.connect();'被执行之后降低到'finally'声明并最终返回'null'。不知道为什么它的行为如此。 – pleft

+0

嗨,尽管我们不鼓励我们推荐一些“更容易”的东西,但改造是一条可行的路。 – Traabefi

回答

0

Hiiii,我检查了您的代码,并且因为“https”连接而出现问题。 你可以使用Volley库。使用以下代码获取来自yout api链接的响应。

首先在你build.gradle文件中加入compile'c​​om.mcxiaoke.volley:library-aar:1.0.0'。

现在

添加下面的代码在你的活动

JsonObjectRequest jsonObjectRequest = new 
    JsonObjectRequest(Request.Method.GET, "https://jsonparsingdemo- 
    cec5b.firebaseapp.com/jsonData/moviesDemoItem.txt", null, new 
    Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      Toast.makeText(MainActivity.this, ""+response, 
    Toast.LENGTH_SHORT).show(); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 
    RequestQueue requestQueue = 
    Volley.newRequestQueue(getApplicationContext()); 
    requestQueue.add(jsonObjectRequest);