DataAPI veut publier des articles sur Android! C'est une API très importante à cette époque. Cette fois, je voudrais expliquer brièvement la spécification des catégories parmi elles.
MainActivity.java
package com.example.mtapply01;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import com.loopj.android.http.*;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
import org.json.*;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
MainActivity act;
Button btnSend;
TextView txtTitle, txtBody;
String cgi_url = "http://path/to/mt-data-api.cgi";
String blog_id = "id";
String username = "username";
String password = "password";
String token;
ArrayList<String> categoryLabel;
ArrayList<Integer> categoryId;
AsyncHttpClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
act = this;
btnSend = (Button) findViewById(R.id.btnSend);
txtTitle = (TextView) findViewById(R.id.txtTitle);
txtBody = (TextView) findViewById(R.id.txtBody);
categoryLabel = new ArrayList<String>();
categoryId = new ArrayList<Integer>();
client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("username", username);
params.put("password", password);
params.put("clientId", "test");
String url = cgi_url.concat("/v2/authentication");
client.post(url, params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject res) {
try {
token = res.getString("accessToken");
Toast.makeText(act, "Vous êtes maintenant connecté", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(act, "Erreur d'identification", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Throwable e, JSONObject res) {
Toast.makeText(act, "Erreur d'identification", Toast.LENGTH_LONG).show();
}
});
url = cgi_url.concat("/v2/sites/2/categories");
client.get(url, params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject json) {
try {
//Pour obtenir le titre
JSONArray datas = json.getJSONArray("items");
for (int i = 0; i < datas.length(); i++) {
categoryLabel.add(datas.getJSONObject(i).getString("label"));
categoryId.add(Integer.parseInt(datas.getJSONObject(i).getString("id")));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable e, JSONObject res) {
Toast.makeText(act, "Erreur d'identification", Toast.LENGTH_LONG).show();
}
});
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Post entry
try {
uploadText();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
private void uploadText() throws JSONException {
CharSequence title = "title";
CharSequence body = "body";
JSONObject entry = new JSONObject();
RequestParams params = new RequestParams();
JSONArray categories = new JSONArray();
JSONObject category;
for(int i=0; i<categoryLabel.size(); i++) {
category = new JSONObject();
category.put("id",categoryId.get(i));
categories.put(category);
}
try {
entry.put("title", title);
entry.put("body", body);
entry.put("categories",categories);
entry.put("status", "Draft");
} catch (JSONException e) {
e.printStackTrace();
}
params.put("entry", entry.toString());
String url = cgi_url.concat("/v2/sites/").concat(blog_id).concat("/entries");
Header[] headers = new Header[1];
headers[0] = new BasicHeader("X-MT-Authorization", "MTAuth accessToken=".concat(token));
client.post(getBaseContext(), url, headers, params, "application/x-www-form-urlencoded", new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject res) {
Toast.makeText(act, "envoyer complètement", Toast.LENGTH_LONG).show();
}
public void onFailure(Throwable e, JSONObject res) {
Toast.makeText(act, "erreur d'envoi", Toast.LENGTH_LONG).show();
}
});
}
private void setButtonEnable(boolean flagEnable){
btnSend.setEnabled(flagEnable);
}
public void onResume() {
super.onResume();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
protected void onStop() {
super.onStop();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eeeeee"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Titre" />
<EditText
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:background="#ffffff"
android:ems="10"
android:inputType="text"
android:padding="3dp" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/txtTitle"
android:layout_marginTop="16dp"
android:text="Texte"
android:textAppearance="?android:attr/textAppearanceSmall" />
<EditText
android:id="@+id/txtBody"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView2"
android:background="#ffffff"
android:ems="10"
android:gravity="center_vertical|top"
android:inputType="textMultiLine"
android:padding="3dp"
android:layout_above="@+id/btnSend" />
<Button
android:id="@+id/btnSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="Envoyer"
/>
</RelativeLayout>
Déclarez cgi_url: DataAPI endpoint
, blog_id: blog ID
, ʻusername: username,
password: password` dans la zone membre.
Obtenez des articles dans ʻonCreate`.
Pour vous connecter, insérez les variables membres ʻusername et
passworddans
RequestParams et ** post ** to
cgi_url + / v2 / authentication avec ʻAsyncHttpClient
.
Si vous vous connectez avec succès, vous entrerez ʻonSuccess et
JSONObject sera retourné, donc enregistrez ʻaccessToken
.
Pour obtenir la catégorie d'article, ** postez ** le RequestParams
créé précédemment à cgi_url + / v2 / sites / 2 / categories
avec ʻAsyncHttpClient`.
Si la catégorie est acquise avec succès, elle entrera ʻonSuccess, donc insérez l'élément de ʻitems
dans JSONArray
.
JSONArray datas = json.getJSONArray("items");
Récupérez le «label» et «id» de la catégorie enregistrée à partir des «éléments» obtenus.
for(int i=0; i<datas.length(); i++) {
categoryLabel.add(datas.getJSONObject(i).getString("label"));
categoryId.add(Integer.parseInt(datas.getJSONObject(i).getString("id")));
}
Vous pouvez maintenant obtenir la catégorie d'article.
Si vous pouvez le faire, tout ce que vous avez à faire est de publier.
private void uploadText() throws JSONException {
CharSequence title = "title";
CharSequence body = "body";
JSONObject entry = new JSONObject();
RequestParams params = new RequestParams();
JSONArray categories = new JSONArray();
JSONObject category;
for(int i=0; i<categoryLabel.size(); i++) {
category = new JSONObject();
category.put("id",categoryId.get(i));
categories.put(category);
}
try {
entry.put("title", title);
entry.put("body", body);
entry.put("categories",categories);
entry.put("status", "Draft");
} catch (JSONException e) {
e.printStackTrace();
}
params.put("entry", entry.toString());
String url = cgi_url.concat("/v2/sites/").concat(blog_id).concat("/entries");
Header[] headers = new Header[1];
headers[0] = new BasicHeader("X-MT-Authorization", "MTAuth accessToken=".concat(token));
client.post(getBaseContext(), url, headers, params, "application/x-www-form-urlencoded", new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject res) {
Toast.makeText(act, "envoyer complètement", Toast.LENGTH_LONG).show();
}
public void onFailure(Throwable e, JSONObject res) {
Toast.makeText(act, "erreur d'envoi", Toast.LENGTH_LONG).show();
}
});
}
Tout d'abord, créez l'élément d'entrée «JSONObject» et «RequestParams» pour envoyer la demande d'article.
Après cela, préparez JSONArray
pour insérer plusieurs catégories et JSONObject
pour insérer des catégories individuelles.
L'entrée de catégorie est id et l'entrée de groupe de catégories est les catégories.
Lorsque ** post **, envoyez en insérant «catégorie» dans «catégories».
Après cela, si vous entrez le point de terminaison de ʻurlet
headers défini comme
params avec ʻAsyncHttpClient
et l'envoyez, vous pouvez créer un article avec la catégorie enregistrée.
Puisqu'il utilise Internet, il est dans le manifeste Android
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
N'oubliez pas de déclarer!
Aimeriez-vous le faire de votre patron? Je l'ai posté sur Qiita pour la première fois quand on m'a demandé! Je suis désolé que le contenu soit trop mauvais. .. .. Je ferai de mon mieux la prochaine fois que j'écrirai!
Recommended Posts