非同期タスクを使用して、json 配列を使用して URL からデータをロードしようとしています。
AsyncTask を呼び出すたびに URL を渡したいと思います。
この例では、情報クラスで AsyncTask を呼び出したいと思います。また、配列からの値をテキスト ビューに表示したいと思います。
どんな助けでも大歓迎です。ありがとう。
info.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/infoTxtLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/InfoTxt"
android:layout_width="match_parent"
android:layout_gravity="top|left"
android:layout_marginBottom="10dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="5dp"
android:layout_marginTop="10dp"
android:text="@string/InfoTxt"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
info.java
public class Info extends Activity {
TextView resultView;
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.info);
resultView = (TextView) findViewById(R.id.dbtext);
new DB().execute();// calling async task
} catch (Exception e) {
Log.e("Log_tag", "Error in opening Info page" + e.toString());
resultView.setText("couldnt load info page");
}
}
}
ブラウザからの結果
[{"client_id":"1","client_name":"client1"},{"client_id":"2","client_name":"client2"}]
db.java
public class DB extends AsyncTask<URL, Integer, String> {
TextView resultView;
String result = "";
String s = "";
InputStream isr = null;
@Override
protected String doInBackground(URL... params) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://127.0.0.1/site/client.php");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
isr = entity.getContent();
} catch (Exception e) {
Log.e("Log_tag", "Error in Http connection" + e.toString());
resultView.setText("couldnt connect to the database");
}
// convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
isr, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
isr.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result" + e.toString());
}
// parse the json data
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json = jArray.getJSONObject(i);
s = s + "ID :" + json.getInt("client_id") + "\n" + "NAME :"
+ json.getString("client_name");
}
//resultView.setText(s);
} catch (Exception e) {
Log.e("log_tag", "Error Parsing Data" + e.toString());
}
return s;
}
protected void onProgressUpdate(Integer... progress) {
// setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
// showDialog("Downloaded " + result + " bytes");
if (s!= null){
resultView.setText(s);
}
}
}