Created
May 4, 2013 06:24
-
-
Save adachic/5516469 to your computer and use it in GitHub Desktop.
webapiをたたいてスピナーに反映するためAsyncTask
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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