Skip to content

Instantly share code, notes, and snippets.

@adachic
Created May 4, 2013 06:24
Show Gist options
  • Save adachic/5516469 to your computer and use it in GitHub Desktop.
Save adachic/5516469 to your computer and use it in GitHub Desktop.
webapiをたたいてスピナーに反映するためAsyncTask
package com.regaria.ijt;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.view.ViewGroup;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.CycleInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.LinearLayout;
import java.io.IOException;
import java.io.StringReader;
import java.util.*;
import android.os.AsyncTask;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.app.ProgressDialog;
//実行時引数、進捗単位、処理結果
public class GetTextTask
extends AsyncTask<Integer, Integer, String>
{
private ProgressDialog mDialog;
private ArrayList<Content> clist;
boolean canCommit = false;
private Context mContext;
private TextView tv;
private Button bt;
private Spinner sp;
int mode= 0;
int intcmt = 0;
int selected_item_id =0;
int etc = 0;
private ArrayList<String> slist;
public GetTextTask(Context context, TextView _tv, int _cmd , Button _bt,
Spinner spinner)
{
mContext = context;
tv = _tv;
bt = _bt;
mode = _cmd;
sp = spinner;
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
if(mode == 1){
tv.setText("残り発言数ロード中...");
}else if(mode == 2){
tv.setText("日変同意状況ロード中...");
}else if(mode == 3){
tv.setText("投票可能な人ロード中...");
}else if(mode == 4){
tv.setText("人狼の内通\n残り内通回数ロード中...");
}
}
/* (1)バックグラウンドでDBをロード */
@Override
protected String doInBackground(Integer... cmd)
{
String vContent = "";
if(mode == 1){
vContent = getRestCountStr(0);
}else if(mode == 2){
vContent = getCommitStr();
}else if(mode == 3){
slist = getVoteCharList();
vContent = "人狼から村を守るために、投票で誰を処刑するのかきめなければならない。(投票先は後から変更ができる)";
}else if(mode == 4){
vContent = "人狼の内通(人狼側にだけ見える)\n"+getRestCountStr(1);
}
return vContent;
}
@Override
protected void onPostExecute(String str) {
super.onPostExecute(str);
Log.d("str",str);
if(mode == 2){
if(canCommit){
bt.setEnabled(true);
}else{
if(intcmt==2){
str +="\n 参加人数がそろってないのでまだNEXTボタンを押すことはできない。11人以上そろえば、押すことが可能だ。";
}else if(intcmt==3){
str +="\n 死んでしまった人はNEXTボタンを押すことはできない。";
}else if(intcmt==4){
str +="\n 既にコミットしているので、NEXTボタンを押すことはできない。";
}
}
}
if(mode == 3){
if(etc == 1){
str = "投票って何だ?まだ何も起こっていないぞ。";
}else if(etc == 2){
str = "残念だが..死んだ人には投票もへったくれもないだろう。";
}else if(etc == 0){
ArrayAdapter<String> adapter
= new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
for(String str1:slist){
adapter.add(str1);
}
sp.setEnabled(true);
sp.setAdapter(adapter);
sp.setSelection(selected_item_id);
bt.setEnabled(true);
}
}
tv.setText(str);
}
public ArrayList<String> getVoteCharList(){
ArrayList<String> slist = new ArrayList<String>();
HttpServerIF my_srv_if = new HttpServerIF();
int tid = 0;
int pid = 0;
if(AppSession.town != null){
tid = AppSession.town.id;
}
if(AppSession.player!= null){
pid = AppSession.player.pid;
}
/*サーバへリクエスト*/
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tid",""+tid));
params.add(new BasicNameValuePair("pid",""+pid));
params.add(new BasicNameValuePair("mode","2"));
my_srv_if.requestText("webapi/select_char.php", false, true,params);
Log.d("return code","code:"+my_srv_if.getResText());
if(my_srv_if.getResText().length() < 1){
//no test
Log.d("NULL1","Not get text.");
}
/*取得したデータをパース*/
try{
final XmlPullParser xpp = Xml.newPullParser();
xpp.setInput(new StringReader(my_srv_if.getResText()));
int parsetype;
int stage =0;
int cnt = 0;
while((parsetype = xpp.next()) != XmlPullParser.END_DOCUMENT){
switch(parsetype){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if(xpp.getName().equals("sel"))stage = 1;
if(xpp.getName().equals("now"))stage = 2;
if(xpp.getName().equals("etc"))stage = 3;
break;
case XmlPullParser.TEXT:
if(stage == 1){
slist.add(Content.getCharacterName(Integer.parseInt(xpp.getText())));
cnt++;
}else if(stage == 2){
selected_item_id = cnt;
stage = 1;
}else if(stage == 3){
etc = Integer.parseInt(xpp.getText());
stage = 1;
}
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
}
} catch (XmlPullParserException xpe){
Log.e("ERROR","aaa1.");
} catch (IOException ie){
Log.e("ERROR","aaa2.");
}
return slist;
}
public String getCommitStr(){
HttpServerIF my_srv_if = new HttpServerIF();
int tid = 0;
int pid = 0;
String str = "";
if(AppSession.town != null){
tid = AppSession.town.id;
}
if(tid == 0){
Log.e("entry error","tid is 0");
return str;
}
if(AppSession.player!= null){
pid = AppSession.player.pid;
}
if(pid == 0){
Log.e("entry error","pid is 0");
return str;
}
/*サーバへリクエスト*/
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tid",""+tid));
params.add(new BasicNameValuePair("pid",""+pid));
my_srv_if.requestText("webapi/commit_str.php", false, true,params);
Log.d("return code","code:"+my_srv_if.getResText());
if(my_srv_if.getResText().length() < 1){
Log.d("NULL","Not get text.");
return str;
}
/*取得したデータをパース*/
try{
final XmlPullParser xpp = Xml.newPullParser();
xpp.setInput(new StringReader(my_srv_if.getResText()));
int parsetype;
int stage =0;
while((parsetype = xpp.next()) != XmlPullParser.END_DOCUMENT){
switch(parsetype){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if(xpp.getName().equals("comstr")){
stage = 1;
}else if(xpp.getName().equals("s")){
stage = 2;
}else if(xpp.getName().equals("al")){
stage = 3;
}
break;
case XmlPullParser.TEXT:
if(stage == 2){
str = xpp.getText();
Log.d("aaa",str);
}else if(stage == 3){
intcmt=Integer.parseInt(xpp.getText());
if(intcmt == 1){
canCommit = true;
}
Log.d("can",""+Integer.parseInt(xpp.getText()));
}
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
}
} catch (XmlPullParserException xpe){
Log.e("ERROR","aaa1.");
} catch (IOException ie){
Log.e("ERROR","aaa2.");
}
return str;
}
/* mode0は、通常発言のこり数
* mode1は、内通のこり数
* */
public String getRestCountStr(int mode){
String normal_str = "";
String own_str = "";
int tid = 0;
int pid = 0;
if(AppSession.town != null){
tid = AppSession.town.id;
}
if(tid == 0){
Log.e("entry error","tid is 0");
return "";
}
if(AppSession.player!= null){
pid = AppSession.player.pid;
}
if(pid == 0){
Log.e("entry error","pid is 0");
return "";
}
Log.e("entry error","tid is "+tid);
Log.e("entry error","pid is "+pid);
HttpServerIF my_srv_if = new HttpServerIF();
/*サーバへリクエスト*/
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tid",""+tid));
params.add(new BasicNameValuePair("pid",""+pid));
params.add(new BasicNameValuePair("wmode",""+mode));
my_srv_if.requestText("webapi/post_remain.php", false, true,params);
Log.d("return code","code:"+my_srv_if.getResText());
if(my_srv_if.getResText().length() < 1){
Log.d("NULL","Not get text.");
return "";
}
/*取得したデータをパース*/
try{
final XmlPullParser xpp = Xml.newPullParser();
xpp.setInput(new StringReader(my_srv_if.getResText()));
int parsetype;
int stage =0;
while((parsetype = xpp.next()) != XmlPullParser.END_DOCUMENT){
switch(parsetype){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if(xpp.getName().equals("rest"))stage = 1;
else if(xpp.getName().equals("n"))stage = 2;
else if(xpp.getName().equals("o"))stage = 3;
else if(xpp.getName().equals("w"))stage = 4;
break;
case XmlPullParser.TEXT:
if(stage == 2){
normal_str =
xpp.getText();
}else if(stage == 3){
own_str =
xpp.getText();
}else if(stage == 4){
own_str =
xpp.getText();
}
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
}
} catch (XmlPullParserException xpe){
Log.e("ERROR","aaa1.");
} catch (IOException ie){
Log.e("ERROR","aaa2.");
}
String str="";
if(mode == 0){
str = normal_str+" "+own_str;
}else if(mode == 1){
str = own_str;
}
return str;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment