私はAndroidアプリの開発を学んでおり、最近、Webサービスを自分のアプリに組み込む方法を学びました。インターネットやこのサイトでも何日も検索しましたが、まったく運がありません! リモートMySQLデータベースから質問がロードされ、現在リストビューに表示されている簡単なクイズアプリを開発していますが、その目的は、ユーザーが回答を選択し、次のボタンを押して次の質問に移動します。各質問で直接アクティビティを作成することもできますが、アプリにはサーバーから質問を変更できる動的な機能が必要です。本当に感謝していますアイデア、チュートリアル、または私に役立つものを教えてください。ありがとうございます。
以下は、ここからビューページャーを使用して編集したコードです < http://www.youtube.com/watch?v=JqFkkXMwWDg >
私の AsyncTask クラス:
public class FetchQuestionsTask extends AsyncTask<String, Void, String> {
private Context mContext;
private View rootView;
private ViewPager mViewPager;
private PagerAdapter mPagerAdapter;
ArrayList<String> QuestionArray = new ArrayList<String>();
ArrayList<String> AnswerArray = new ArrayList<String>();
private String msg;
View description;
public FetchQuestionsTask(Context context, View rootView) {
this.mContext = context;
this.rootView = rootView;
}
@Override
protected String doInBackground(String... params) {
if (params == null)
return null;
// get url from params
String url = params[0];
try {
// create http connection
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
// connect
HttpResponse response = client.execute(httpget);
// get response
HttpEntity entity = response.getEntity();
if (entity == null) {
msg = "No response from server";
return null;
}
// we get response content and convert it to json string
InputStream is = entity.getContent();
return streamToString(is);
} catch (IOException e) {
msg = "No Network Connection";
Log.e("Log message", "No network connection");
}
return null;
}
@Override
protected void onPostExecute(String sJson) {
if (sJson == null) {
return;
}
try {
ArrayList<String> QuestionArray = new ArrayList<String>();
ArrayList<String> AnswerArray = new ArrayList<String>();
// convert json string to json array
JSONArray aJson = new JSONArray(sJson);
for (int i = 0; i < aJson.length(); i++) {
JSONObject json = aJson.getJSONObject(i);
QuestionArray.add(json.getString("description"));
// AnswerArray.add(json.getString("answer_text"));
}
} catch (JSONException e) {
msg = "Invalid response";
}
mPagerAdapter = new PagerAdapter(null, mContext);
mViewPager = (ViewPager) rootView.findViewById(R.id.viewpager);
mViewPager.setAdapter(mPagerAdapter);
}
/**
* This function will convert response stream into json string
*
* @param is
* response string
* @return json string
* @throws IOException
*/
public String streamToString(final InputStream is) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
throw e;
} finally {
try {
is.close();
} catch (IOException e) {
throw e;
}
}
return sb.toString();
}
}
MyFragment クラス:
@SuppressLint("ValidFragment")
public class Page1 extends Fragment {
Context c2;
String description, answer_text;
/* public Page1() {
}*/
@SuppressLint("ValidFragment")
public Page1(Context c2,String description,String answer_text){
this.c2 = c2;
this.description = description;
this.answer_text = answer_text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_pages_list,container, false);
c2=getActivity();
new FetchQuestionsTask(c2, v).execute("http://10.0.2.2/webservice/new_questions");
try{
TextView question_txt = (TextView)v.findViewById(R.id.q_description);
question_txt.setText(description);
TextView answer_txt = (TextView)v.findViewById(R.id.ans_txt);
answer_txt.setText(answer_text);
}catch(Exception e){
Log.e("Log error :", "could not write the text views");
}
return v;
}
}
私のアダプタークラス:
public class PagerAdapter extends FragmentStatePagerAdapter{
ArrayList<String> QuestionArray = new ArrayList<String>();
ArrayList<String>AnswerArray = new ArrayList<String>();
private int []colors = {Color.parseColor("#00B050"),Color.parseColor("#FFC000"), Color.parseColor("#DB1351"),
Color.parseColor("#B61C83"), Color.parseColor("#0070C0")};
Context c;
private Random rnd;
public PagerAdapter(FragmentManager fm,Context c) {
super(fm);
this.c = c;}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
String description = QuestionArray.get(position);
String answer_text = AnswerArray.get(position);
fragment = new Page1(c, description, answer_text);//pass value to be displayed in inflated view
return fragment;
}
@Override
public int getCount() {
return QuestionArray.size(); //get number of pages to be displayed
}
}