0

これに関するいくつかのチュートリアルを見てきましたが、それらはすべて、メイン スレッドでのネットワーク呼び出しを防止する Android アップデートよりも古いものです。それを呼び出すコードを RetrieveFeedTask に移動しようとしましたが、メイン スレッドでデータを取得する方法がなかったため、役に立ちませんでした。これが私がしたことです:

class RetrieveFeedTask extends AsyncTask <String, Void, String>
{

    private Exception exception;

    private String doInBackground()
    {
        String returnString = "sample";

         ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        //http post
        try{
             HttpClient httpclient = new DefaultHttpClient();
             HttpPost httppost = new HttpPost("http://localhost/sample_array.php");
             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
             HttpResponse response = httpclient.execute(httppost);
             HttpEntity entity = response.getEntity();
             is = entity.getContent();
             }catch(Exception e){
                 Log.e("log_tag", "Error in http connection"+e.toString());
            }
        //convert response to string
        try{
              BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
               sb = new StringBuilder();
               sb.append(reader.readLine() + "\n");

               String line="0";
               while ((line = reader.readLine()) != null) {
                              sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
                }catch(Exception e){
                      Log.e("log_tag", "Error converting result "+e.toString());
                }
        //paring data
        int step_num;
        String description;
        try{
              jArray = new JSONArray(result);
              JSONObject json_data=null;
              for(int i=0;i<jArray.length();i++){
                     json_data = jArray.getJSONObject(i);
                     step_num=json_data.getInt("step_num");
                     description=json_data.getString("description");
                 }
              }
              catch(JSONException e1){
                  Toast.makeText(getBaseContext(), "No step found" ,Toast.LENGTH_LONG).show();
              } catch (ParseException e1) {
                    e1.printStackTrace();
            }

        //System.out.println(result);
        return result;
    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        return null;
    }

}

次に、メインスレッドで、これを行いました:

AsyncTask<String, Void, String> returnString = new RetrieveFeedTask().execute();

では、メイン スレッドで使用する情報を取得するにはどうすればよいでしょうか。

4

3 に答える 3

3

ほとんど問題ありませんが、2 つのエラーがあります。

  1. 決して呼び出されない doInBackground メソッドをオーバーロードしています。
  2. 「現在」空の doInBackground 実装内に自分のものを実装します。

メインスレッドにデータを戻したい場合は、次のことができます。

  1. runOnUiThreadメソッドを使用する
  2. asynctask を拡張してonPostExecuteメソッドをオーバーライドするAnonymous Inner Classをアクティビティ内に作成します。(これは ui スレッドで実行されます)

:)

于 2012-06-10T10:45:08.260 に答える
1

必要なデータを JSON 形式で返す 1 つの Web サービスを作成できます。それをサーバーに配置します。Androidを使用してそのWebサービスを呼び出します。このようにして、PHPからAndroidにデータを取得できます

于 2012-06-10T10:33:00.573 に答える
0

現在のコードを空の doInBackground ブロックに実装します

 @Override
protected String doInBackground(String... arg0) {
    // TODO Auto-generated method stub
    return null;
}

上記のメソッドからの戻り文字列は、onPostExecuteメソッドで受信されます。コードにも実装する必要がありますが、これは現在のところ実際にはありません。

于 2012-06-10T11:01:02.023 に答える