HTTPから文字列を取得し、それを使用してJSONオブジェクトを構築するにはどうすればよいですか?

Cyprien Aubry

Twitchストリームに関するデータを格納するために、HTTPサーバーから文字列(実際にはJSONファイル)を取得しようとしています。

接続して取得した文字列:api.twitch.tv/kraken/streams/lainkk

この文字列を文字列変数で取得し、この文字列からJSONオブジェクトを作成したいと思います。

私はいくつかのメソッドを作成しましたが、それらのメソッドを呼び出している間、常にログにSystemErrが記録されました。

これは私自身のTwitchAPIクラスです:

package com.linkpulsion.bibix;

import android.util.Log;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class Twitch {
    private String channel;
    public final static String TWITCH_API_SERVER = "https://api.twitch.tv/kraken/";

/**
 * Constructor of Java Twitch API Json Generator
 * @param channel The cannel name to get the infos
 */
public Twitch(String channel){
    if(channel != null){
        this.channel = channel;
    }
}

/**
 * Getter for channel name
 * @return String the channel name
 */
public String getChannel(){
    return this.channel;
}

protected String getJson(String mode){
    String apiUri = TWITCH_API_SERVER + mode + "/" + this.channel;
    try{
        URL website = new URL(apiUri);
        URLConnection connection = website.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder response = new StringBuilder();
        String inputLine;
        while ((inputLine = in.readLine()) != null)
            response.append(inputLine);
        in.close();
        return response.toString();
    }catch (Exception e){
        e.printStackTrace();
        return null;
    }
}

protected JSONObject buildJSON(String jsonRaw){
    JSONObject json = null;
    try{
        json = new JSONObject(jsonRaw);
    }catch (Exception e){
        e.printStackTrace();
    }
    return json;
}

public void isSreaming(){
    String jsonRaw = getJson("streams");
    Log.d(null,"RETOUR " + jsonRaw);
}
}

ありがとうございました !

ダニエル・ニュージェント

元のコードを実行したところ、NetworkOnMainThreadExceptionが発生しました。

簡単なAsyncTaskを作成しましたが、機能しました。

private class TwitchAsync extends AsyncTask<Void, Void, String> {
    @Override
    protected String doInBackground(Void... params) {
        String str = twitch.getJson("streams");
        return str;
    }

    @Override
    protected void onPostExecute(String result){
        Toast.makeText(MainActivity.this, "result: " + result, Toast.LENGTH_LONG).show();

        //testing buildJSON:
        JSONObject obj = twitch.buildJSON(result);

        Log.d("JSON Result: ",  obj.toString());
    }
}

これが私がテストに使用した完全なクラスです:

public class MainActivity extends AppCompatActivity {

    Twitch twitch;
    JSONObject jsonObj;  //instance variable which can be accessed anywhere in the class code

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        twitch = new Twitch("aksynial");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.action_settings) {

            System.out.println("REFRESHING");
            new TwitchAsync().execute();

            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private class TwitchAsync extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... params) {
            String str = twitch.getJson("streams");
            return str;
        }

        @Override
        protected void onPostExecute(String result){
            Toast.makeText(MainActivity.this, "result: " + result, Toast.LENGTH_LONG).show();

            //testing buildJSON:
            //assign to the instance variable jsonObj
            jsonObj = twitch.buildJSON(result);

            Log.d("JSON Result: ",  jsonObj.toString());
        }
    }
}

結果を記録するonPostExecute()

 D/JSON Result:﹕ {"_links":{"channel":"https:\/\/api.twitch.tv\/kraken\/channels\/aksynial","self":"https:\/\/api.twitch.tv\/kraken\/streams\/aksynial"},"stream":null}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

この文字列を変更してJavaのJSONオブジェクトから必要な値を取得するにはどうすればよいですか?

分類Dev

ジャクソンのObjectMapperを使用してJSON文字列からオブジェクトを作成するにはどうすればよいですか?

分類Dev

オブジェクトのように `this`を使用し、その変数/関数を文字列で取得するにはどうすればよいですか?

分類Dev

PowerShellを使用して配列JSON内のオブジェクトからキー値を取得するにはどうすればよいですか?

分類Dev

JQUERYを使用してJSON配列オブジェクトからデータを取得するにはどうすればよいですか?

分類Dev

jQueryを使用してJSONオブジェクトの配列から値を取得するにはどうすればよいですか?

分類Dev

React Nativeの文字列からその値を参照してオブジェクトにアクセスするにはどうすればよいですか?

分類Dev

オブジェクト配列からオブジェクトを保存してから取得するにはどうすればよいですか?(Javascript)

分類Dev

文字列を介してクラスのオブジェクトから値を取得するにはどうすればよいですか?

分類Dev

Reactを使用してhandleChangeでネストされたオブジェクトを構築するにはどうすればよいですか?

分類Dev

クラス名として変数を使用してオブジェクトを構築するにはどうすればよいですか?

分類Dev

Laravel 5の変数からその名前を使用してモデルオブジェクトを取得するにはどうすればよいですか?

分類Dev

jqueryを使用してネストされたJSONオブジェクトから値を取得するにはどうすればよいですか?

分類Dev

配列オブジェクトから文字列を取得するにはどうすればよいですか

分類Dev

JSONオブジェクトを返すAPIからAngular8を使用してデータを取得するにはどうすればよいですか?

分類Dev

文字列の配列を取得して、さらにオブジェクトに分割するにはどうすればよいですか?

分類Dev

jqを使用してサブオブジェクトをjsonオブジェクトから削除するにはどうすればよいですか?

分類Dev

javascriptオブジェクトから文字列値を取得するにはどうすればよいですか?

分類Dev

小道具を使用してReactコンポーネントのオブジェクトを動的に構築するにはどうすればよいですか?

分類Dev

文字列値を使用してNSArray内のオブジェクトのインデックスを取得するにはどうすればよいですか?

分類Dev

JavaScriptを使用してオブジェクトの配列からオブジェクトを削除するにはどうすればよいですか?

分類Dev

GSONを使用して同じJSONファイルから複数のJavaオブジェクトを取得するにはどうすればよいですか?

分類Dev

JavaScript ES6-「新しい」で構築できるようにオブジェクトを超構築するにはどうすればよいですか?

分類Dev

lodashを使用して、オブジェクトの複雑な配列から値を取得するにはどうすればよいですか?

分類Dev

javascriptを使用してオブジェクトの配列からキーの一意の値を取得するにはどうすればよいですか?

分類Dev

jQueryを使用して配列内の特定のオブジェクトから属性を取得するにはどうすればよいですか?

分類Dev

lodashを使用してオブジェクトプロパティ配列から値を取得するにはどうすればよいですか?

分類Dev

jqueryとjavascriptを使用してオブジェクト配列から値を取得するにはどうすればよいですか

分類Dev

javascriptを使用してオブジェクトの配列から必要なデータを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    この文字列を変更してJavaのJSONオブジェクトから必要な値を取得するにはどうすればよいですか?

  2. 2

    ジャクソンのObjectMapperを使用してJSON文字列からオブジェクトを作成するにはどうすればよいですか?

  3. 3

    オブジェクトのように `this`を使用し、その変数/関数を文字列で取得するにはどうすればよいですか?

  4. 4

    PowerShellを使用して配列JSON内のオブジェクトからキー値を取得するにはどうすればよいですか?

  5. 5

    JQUERYを使用してJSON配列オブジェクトからデータを取得するにはどうすればよいですか?

  6. 6

    jQueryを使用してJSONオブジェクトの配列から値を取得するにはどうすればよいですか?

  7. 7

    React Nativeの文字列からその値を参照してオブジェクトにアクセスするにはどうすればよいですか?

  8. 8

    オブジェクト配列からオブジェクトを保存してから取得するにはどうすればよいですか?(Javascript)

  9. 9

    文字列を介してクラスのオブジェクトから値を取得するにはどうすればよいですか?

  10. 10

    Reactを使用してhandleChangeでネストされたオブジェクトを構築するにはどうすればよいですか?

  11. 11

    クラス名として変数を使用してオブジェクトを構築するにはどうすればよいですか?

  12. 12

    Laravel 5の変数からその名前を使用してモデルオブジェクトを取得するにはどうすればよいですか?

  13. 13

    jqueryを使用してネストされたJSONオブジェクトから値を取得するにはどうすればよいですか?

  14. 14

    配列オブジェクトから文字列を取得するにはどうすればよいですか

  15. 15

    JSONオブジェクトを返すAPIからAngular8を使用してデータを取得するにはどうすればよいですか?

  16. 16

    文字列の配列を取得して、さらにオブジェクトに分割するにはどうすればよいですか?

  17. 17

    jqを使用してサブオブジェクトをjsonオブジェクトから削除するにはどうすればよいですか?

  18. 18

    javascriptオブジェクトから文字列値を取得するにはどうすればよいですか?

  19. 19

    小道具を使用してReactコンポーネントのオブジェクトを動的に構築するにはどうすればよいですか?

  20. 20

    文字列値を使用してNSArray内のオブジェクトのインデックスを取得するにはどうすればよいですか?

  21. 21

    JavaScriptを使用してオブジェクトの配列からオブジェクトを削除するにはどうすればよいですか?

  22. 22

    GSONを使用して同じJSONファイルから複数のJavaオブジェクトを取得するにはどうすればよいですか?

  23. 23

    JavaScript ES6-「新しい」で構築できるようにオブジェクトを超構築するにはどうすればよいですか?

  24. 24

    lodashを使用して、オブジェクトの複雑な配列から値を取得するにはどうすればよいですか?

  25. 25

    javascriptを使用してオブジェクトの配列からキーの一意の値を取得するにはどうすればよいですか?

  26. 26

    jQueryを使用して配列内の特定のオブジェクトから属性を取得するにはどうすればよいですか?

  27. 27

    lodashを使用してオブジェクトプロパティ配列から値を取得するにはどうすればよいですか?

  28. 28

    jqueryとjavascriptを使用してオブジェクト配列から値を取得するにはどうすればよいですか

  29. 29

    javascriptを使用してオブジェクトの配列から必要なデータを取得するにはどうすればよいですか?

ホットタグ

アーカイブ