Android:将我从API返回的JSON转换为单个字符串 [英] Android: Get my returned JSON from an API into individual strings

查看:166
本文介绍了Android:将我从API返回的JSON转换为单个字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图以某种方式将我返回的JSON从API转换为单个字符串。

I am trying to somehow get my returned JSON from an API into individual strings.

我的代码在这里从API获取有关电影的信息: http://www.omdbapi.com/?t=Buffy& type = series& plot = short& apikey = 8dc1b08d

My code here gets information about a movie from the API: http://www.omdbapi.com/?t=Buffy&type=series&plot=short&apikey=8dc1b08d

它返回JSON。但是我需要从Title中获取一些值,例如Buffy the Vampire Slayer到一个String变量。

It returns the JSON. However I need to get some value, such as "Buffy the Vampire Slayer" from the "Title" into a String variable.

新闻

package com.example.project21.stepbystep;

        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.view.View;
        import android.widget.Button;
        import android.widget.TextView;

public class WalkNews extends AppCompatActivity implements AsyncResponse{

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

        Button btnGet = (Button) findViewById(R.id.btnGet);

        final GetMethod getRequest = new GetMethod(this);
        btnGet.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v)
            {
                getRequest.execute("http://www.omdbapi.com/?t=Buffy&type=series&plot=short&apikey=8dc1b08d");
            }
        });

    }

    public void processFinish(String output){

        TextView viewGet = (TextView) findViewById(R.id.txtGet);
        viewGet.setText(output);


    }
}

GetMethod

GetMethod

package com.example.project21.stepbystep;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


public class GetMethod extends AsyncTask<String , Void ,String> {
    String server_response;
    private AsyncResponse delegate ;



    protected GetMethod(AsyncResponse delegate) {
        this.delegate = delegate;
    }

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


        delegate=delegate;
        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(strings[0]);

            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.connect();
            int responseCode = urlConnection.getResponseCode();

            if (responseCode == HttpURLConnection.HTTP_OK) {
                server_response = readStream(urlConnection.getInputStream());
                Log.v("CatalogClient", server_response);
                return server_response;
            }

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

        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        // super.onPostExecute(s);
        delegate.processFinish(server_response);



    }


// Converting InputStream to String

    private String readStream(InputStream in) {
        BufferedReader reader = null;
        StringBuffer response = new StringBuffer();
        try {
            reader = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return response.toString();
    }
}

异步响应

package com.example.project21.stepbystep;

public interface AsyncResponse {

    void processFinish(String output);
}


推荐答案

为此创建Model类你从ApI得到的数据如下:试试这个

Create the Model class for the data you got from ApI like below: try this

  public class DataObject {
        private String title;
        private String year;
        private String rated;
        private String genre;
        private String director;
        private String writer;
        private String actors;
        private String plot;
        private String language;
        private String country;
        private String awards;

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getYear() {
            return year;
        }

        public void setYear(String year) {
            this.year = year;
        }

        public String getRated() {
            return rated;
        }

        public void setRated(String rated) {
            this.rated = rated;
        }

        public String getGenre() {
            return genre;
        }

        public void setGenre(String genre) {
            this.genre = genre;
        }

        public String getDirector() {
            return director;
        }

        public void setDirector(String director) {
            this.director = director;
        }

        public String getWriter() {
            return writer;
        }

        public void setWriter(String writer) {
            this.writer = writer;
        }

        public String getActors() {
            return actors;
        }

        public void setActors(String actors) {
            this.actors = actors;
        }

        public String getPlot() {
            return plot;
        }

        public void setPlot(String plot) {
            this.plot = plot;
        }

        public String getLanguage() {
            return language;
        }

        public void setLanguage(String language) {
            this.language = language;
        }

        public String getCountry() {
            return country;
        }

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

        public String getAwards() {
            return awards;
        }

        public void setAwards(String awards) {
            this.awards = awards;
        }
    }   



         public DataObject processFinish(String output){
     TextView viewGet = (TextView) findViewById(R.id.txtGet);

            DataObject object = parseJson(output);
    if(object != null){
     viewGet.setText(object.getTitle);
    }
 }

 public DataObject parseJson(String output){
   DataObject dataObject = null;
   if(output != null){
   try {

      JSONObject jsonObject = new JSONObject(output);

      String title = jsonObject.getString("Title");
      String year = jsonObject.getString("Year");
      String rated = jsonObject.getString("Rated");
      dataObject = new DataObject();
      dataObject.setTitle(title);
      dataObject.setYear(year);
      dataObject.setRated(rated);
    } catch (Exception e) {
        e.printStackTrace();
     }
} else {
         Toast.makeText(context, "Didn't get data from json",Toast.LENGTH_SHORT).show();
}

            return dataObject;
        }

这篇关于Android:将我从API返回的JSON转换为单个字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆