android riot apiの使用
Task
「
riot api
https://developer.riotgames.com/apis
Liott開発者のウェブサイトにはapiが詳しく記録されています.
ログイン後にapi-keyを受け取りました.
api-keyは毎日更新されます.
summoner-v4
ニックネームとapi keyを使用してrequest urlを構成します.
league-v4
SummonerIdを
ニックネームでは取得できませんので、EncrypteSummonerIdで取得します.
伝票-v 4でaccountIdで受信します.
In Android Studio
manifest.xml
インターネットへのアクセス権の取得<uses-permission android:name="android.permission.INTERNET" />
layout
<uses-permission android:name="android.permission.INTERNET" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="350dp"
android:layout_height="130dp"
android:gravity="center"
android:background="@drawable/id_register_item"
android:id="@+id/id_register_item"
android:visibility="gone"
tools:showIn="@layout/activity_main"
>
<ImageView
android:id="@+id/user_icon"
android:layout_width="150dp"
android:layout_height="80dp"
android:layout_weight="1"
android:src="@drawable/garen"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="5"
android:orientation="vertical"
android:textAlignment="gravity">
<TextView
android:id="@+id/user_nickname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="TextView"
android:textColor="#006D44" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/user_level"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="TextView"
android:textColor="#006D44" />
<TextView
android:id="@+id/user_tier"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:text="TextView"
android:textColor="#006D44" />
</LinearLayout>
<TextView
android:id="@+id/user_mbti"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="TextView"
android:textColor="#006D44" />
<TextView
android:id="@+id/user_manner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="TextView"
android:textColor="#006D44" />
</LinearLayout>
</LinearLayout>
メインレイアウトにアタッチします.IDが登録されていない場合は表示されないので、表示をgoneに設定します.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_gravity="center">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/id_register_item" />
<Button
android:id="@+id/plus_id_register"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/register_game_id"/>
</LinearLayout>
</LinearLayout>
Name_API_Thread
apiを受信する操作はインターネットからリソースを受信する操作であるため,スレッドが継承される.
class Name_API_Thread extends Thread
public Name_API_Thread(String Summoners_name){
this.Summoners_name = Summoners_name;
}
public JSONObject get(String strUrl){
try{
URL url = new URL(strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(5000);
con.setReadTimeout(5000);
con.setRequestMethod("GET");
con.setDoOutput(false);
StringBuilder sb = new StringBuilder();
if(con.getResponseCode() == HttpURLConnection.HTTP_OK){
//url에서 버퍼 형태로 데이터를 받음
BufferedReader br = new BufferedReader(new InputStreamReader
(con.getInputStream(), "utf-8"));
String line = br.readLine();
while((line != null)){
sb.append(line).append("\n");
line = br.readLine();
}
br.close();
String result = sb.toString();
//JSON 형태로 변환 후 리턴
JSONObject jsonObj = new JSONObject(result);
return jsonObj;
}else{
Log.d("wrong response: ", con.getResponseMessage());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
パラメータとしてurlを受信しJSOnObjectを返す方法.伝票-v 4とleague-v 4のURLアドレスが異なるため、それぞれメソッドが作成されています.
@Override
public void run() {
String SummonerName = this.Summoners_name.replaceAll(" ", "%20");
String requestURL = "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/" + SummonerName + "?api_key=" + TOKEN;
//API lol_api = new API();
JSONObject jsonObj = get(requestURL);
try {
if(jsonObj == null){ is_success = false; return; }
else{ is_success = true;}
Summoners_id = (String) jsonObj.get("id");
Summoners_level = (int) jsonObj.get("summonerLevel");
Summoners_icon = (int) jsonObj.get("profileIconId");
Summoners_bitmap = getImageFromUrl("https://ddragon.leagueoflegends.com/cdn/10.18.1/img/profileicon/"+getSummoners_info("icon")+".png");
getInfo();
} catch (JSONException e) {
e.printStackTrace();
}
}
メインアクティブデバイスでstartコマンドを発行するときに実行する方法.TOKENはapi keyです.
これにより、EncrypteSummonerId、Level、アイコンIDを取得できます.
public void getInfo(){
String requestURL = "https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/"+Summoners_id+"?api_key="+TOKEN;
JSONObject jsonObj = get(requestURL);
try {
Summoners_tier = (String) jsonObj.get("tier");
Summoners_rank = (String) jsonObj.get("rank");
Summoners_win = (int) jsonObj.get("win");
Summoners_lose = (int) jsonObj.get("lose");
} catch (JSONException e) {
e.printStackTrace();
}
}
EncrypteSummonerIdによりTier,Rank,勝利−失敗数を得ることができる.MainActivity.java
final EditText et = new EditText(getApplicationContext());
//닉네임을 받는 dialog
final AlertDialog.Builder alt_blt = new AlertDialog.Builder(MainActivity.this, R.style.plus_id_register_dialog_style);
alt_blt.setTitle("아이디 생성")
.setMessage("닉네임을 적어주세요")
.setCancelable(false)
.setView(et)
.setPositiveButton("확인", new DialogInterface.OnClickListener() {...});
AlertDialog dialog = alt_blt.create();
dialog.show();
プレイヤーのニックネームをdialogで取得します.[in OnClickListener]
public void onClick(DialogInterface dialogInterface, int i) {
String value = et.getText().toString();
//롤 닉네임으로 사용자의 id, level 티어, 승패를 받아온다.
apiThread = new Name_API_Thread(value);
try {
apiThread.start();
apiThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//만약 아이디가 없는 아이디라면 Toast로 메시지 도시하고 중단.
if(apiThread.getSummoners_info("is_success") == "false"){
Toast.makeText(getApplicationContext(), "Wrong NickName!!", Toast.LENGTH_SHORT).show();
return;
}
TextView user_nickname = (TextView) findViewById(R.id.user_nickname);
TextView user_level = (TextView) findViewById(R.id.user_level);
TextView user_tier = (TextView) findViewById(R.id.user_tier);
TextView user_mbti = (TextView) findViewById(R.id.user_mbti);
TextView user_manner = (TextView) findViewById(R.id.user_manner);
LinearLayout user_layout = (LinearLayout) findViewById(R.id.id_register_item);
plus_id_register.setVisibility(View.GONE);
user_layout.setVisibility(View.VISIBLE);
user_nickname.setText(value);
user_level.setText("Level: " + apiThread.getSummoners_info("level"));
user_tier.setText("Tier: " + apiThread.getSummoners_info("tier"));
user_mbti.setText("MBTI: INFT");
user_manner.setText("Manner: "+"SUCK");
ImageView user_icon = (ImageView) findViewById(R.id.user_icon);
user_icon.setImageBitmap(apiThread.getSummoners_bitmap());
}
apiThread.join();
:メッセージを受信する前に、アクティブなビューの内容を空の値で埋め込む問題があるため、トピックの終了を待ってから続行してください.urlで必要なビットマップ画像をインポート
Summons iconは、インポートするユーザーアイコンのインデックスを格納します.これを利用してurlを用いてビットマップを取得した.
url: "https://ddragon.leagueoflegends.com/cdn/10.18.1/img/profileicon/" + Summoners_icon + ".png "
public Bitmap getImageFromUrl(String urlStr){
Bitmap imgBitmap = null;
try{
URL url = new URL(urlStr);
URLConnection con = url.openConnection();
con.connect();
BufferedInputStream bf = new BufferedInputStream(con.getInputStream());
imgBitmap = BitmapFactory.decodeStream(bf);
bf.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return imgBitmap;
}
public Bitmap getSummoners_bitmap(){
return Summoners_bitmap;
}
実行画面
私のコードを見てくれてありがとう.グーグルを作るときは和弦をたくさん混ぜていますが大変ですね
フィードバックを歓迎します.
Reference
この問題について(android riot apiの使用), 我々は、より多くの情報をここで見つけました https://velog.io/@minjun7410/안드로이드-riot-apiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol