如何使用gson库从json获取结果

问题描述 投票:0回答:1

我从soundcloud api获取okhttp库和gson库的结果,但我不知道如何正确使用它,我可以使用Asynctask和gson库还是应该为此目的使用改造这是我的代码

main activity.Java

public class MainActivity extends Activity 
{
Button b;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    b = (Button) findViewById(R.id.start);

    b.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View p1)
            {
                // TODO: Implement this method
                MyAsyncTask task = new MyAsyncTask();
                task.execute();
            }           
    });
}
 }

my A sync task.Java

 public class MyAsyncTask extends AsyncTask <Void,Void,String>
 {

public static final String API_URL = "https://api.soundcloud.com";
public static final String CLIENT_ID ="iZIs9mchVcX5lhVRyQGGAYlNPVldzAoX";
String url = "https://api.soundcloud.com/tracks?client_id=iZIs9mchVcX5lhVRyQGGAYlNPVldzAoX";
String res;
Context ctx;
Track t;
String temp;
List<Track> tracks;

@Override
protected String doInBackground(Void[] p1)
{
    // TODO: Implement this method
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder().url(url).build();

    try
    {
        Response response = client.newCall(request).execute();
        res = response.body().string();     

    }
    catch (IOException e)
    {
        String err = (e.getMessage() == null) ?"Failed to translate": e.getMessage();
        Log.e("failed:", err);  
    }
    return res;
}


@Override
protected void onPostExecute(String result)
{
    // TODO: Implement this method
    //Toast.makeText(ctx,"result "+result, Toast.LENGTH_SHORT).show();
    Log.d("Track","");
    Log.e("res", result);
    super.onPostExecute(result);
}
  }

track.Java

 public class Track
  {
@SerializedName("title")
private String mTitle;

@SerializedName("stream_url")
private String mStreamUrl;

public String getTitle()
{
    return mTitle;
}

public String getStreamUrl()
{
    return mStreamUrl;
}
 }

我的json结果是String res值,那么如何只用gson库显示曲目标题名?

java android rest okhttp3
1个回答
0
投票

发现了类似的问题here

将字符串格式化为Gson格式,然后检索您的标题。

Response response = client.newCall(request).execute();
res = response.body().string(); 
Track[] track = new Gson().fromJson(res,Track[].class);

track []现在包含一个轨道列表,用于检索您需要迭代列表并检索每个轨道标题的每个轨道。例如,track[0].getTitle()应该返回你的第一首歌。

我在python中做了一个快速示例,看看它是否有效(在这台PC上没有我的Java环境)。

这是Python中的代码

import urllib, json
url = "https://api.soundcloud.com/tracks?client_id=iZIs9mchVcX5lhVRyQGGAYlNPVldzAoX"

response = urllib.urlopen(url)
array = json.loads(response.read())

for index, value in enumerate(array):
    print array[index]['title']

这是我的输出:

"What Kind Of" by Maïmouna Guerresi
Swiftness - Akrown Mix
Disney Network Is So Corruped
Closer - The Chainsmokers (Cover)
VISUALISATION OF SOUND. S.Letov, R.Stolyar, A.Vostrtikov, G.Averin.
s a d  m a n  h o u r s
Jackass Alt76 MasteringBOX
OBEDIAH-SERIOUS - TIMES. GAP STOPPING RIDDIM TIMES
idrk
Ghost (OG COVER)
Stadtratswahlen 2018: Stefan Erdös ist ein Wahlbeobachter
Hoi Han Trong Anh -  Ben Heineken  Remix
XXXTentacion - Changes Remix By Joseph Okuwa
NCT_DREAM_엔시티_드림_GO
新曲0305
How Can Love Be Mature - demo
【ハッピーガバコンピ】トリフィドの友人(cribbing ver)
20170322
10 toes challenge Rip Ari2x and Quasean (12/12/2017)
Note
Miniature Authority (short logo music)
Linnahalli Kai
Jacquees- 10-4 (Chimpmunk Version)
Stars
Madrid (King Richard Cover)
Systemaudio - Part 1
Londonvybes.com 2018 Update On Grenfell
Brink Remix [Ray Punch]
Validation on the road
i'll kill it when im asleep
The forever land
Avicii – How Many Lovers(Drop)/ MODE COLD BREW JINGLE
Imperial 1 - Papa Did You Know (Audio)
Dj Devil School Armenia Freestyle Remix ريمكس ديجي دفل اسكول فرستايل.MP3
album nyckelharpa solo - part 1
Strips(ep.1)
We'll Get By
Are We Too Hard on Rookies? - The Left Turn
Bluddy Katon (OG COVER)
The 1960s Were Great
Where is the love?
© www.soinside.com 2019 - 2024. All rights reserved.