-1

非同期タスクを使用して、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);
    }
}
}
4

1 に答える 1