0

こんにちは、これは私の最初のアプリです。私はプログラミングとアンドロイドに関しては初心者です。私のアプリはツイッターアプリに似ています。しかし、Twitter から値を取得する代わりに、データベースから値を取得します。アプリには、画像と Web ページへのリンクが読み込まれます。

私の質問。私のアプリがアプリストアにあり、誰かがそれをダウンロードしたとしましょう。私のアプリは、Json を介して私の mysql データベースからコンテンツのほとんどを取得します。新しいコンテンツをデータベースに追加するたびに、ユーザーはアプリを更新して新しいコンテンツを取得するか、自動的に更新する必要があります。

誰かが私のコードを見てもらえますか。Async() と doInBackground() についてはよくわかりません。他に役立つコーディングの提案があれば、お知らせください。このアプリが完成したら、App Store に掲載したいと考えています。

敬具

public class TwitterFeedActivity extends ListActivity {

    private ArrayList<Tweet> tweets = new ArrayList<Tweet>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new MyTask().execute();
    }
    private class MyTask extends AsyncTask<Void, Void, Void> {
        private ProgressDialog progressDialog;


        protected void onPreExecute() {
            progressDialog = ProgressDialog.show(TwitterFeedActivity.this,
                    "", "Loading. Please wait...", true);
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            try {
                HttpClient hc = new DefaultHttpClient();
                HttpGet get = new HttpGet("http://myurl.com");
                HttpResponse rp = hc.execute(get);

                if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
                {
                    String result = EntityUtils.toString(rp.getEntity());
                    JSONObject root = new JSONObject(result);
                    JSONArray sessions = root.getJSONArray("results");

                    for (int i = 0; i < sessions.length(); i++) {
                        JSONObject session = sessions.getJSONObject(i);
                        Tweet tweet = new Tweet();
                        tweet.n_text = session.getString("n_text");
                        tweet.n_name = session.getString("n_name");
                        tweet.Image = session.getString("Image");
                        tweets.add(tweet);
                    }
                }

            } catch (Exception e) {
                Log.e("TwitterFeedActivity", "Error loading JSON", e);
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            progressDialog.dismiss();
            setListAdapter(new TweetListAdaptor(TwitterFeedActivity.this, R.layout.list_item, tweets));
        }
    }

    private class TweetListAdaptor extends ArrayAdapter<Tweet> {
        private ArrayList<Tweet> tweets;
        public TweetListAdaptor(Context context, int textViewResourceId, ArrayList<Tweet> items) {
            super(context, textViewResourceId, items);
            this.tweets = items;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.list_item, null);
            }
            final Tweet o = tweets.get(position);
            TextView tt = (TextView) v.findViewById(R.id.toptext);
            TextView bt = (TextView) v.findViewById(R.id.bottomtext);
            ImageView image = (ImageView) v.findViewById(R.id.avatar);
            bt.setText(o.n_name);
            tt.setText(o.n_text);
            image.setImageBitmap(getBitmap(o.Image));

            image.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v){
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.addCategory(Intent.CATEGORY_BROWSABLE);
                    intent.setData(Uri.parse(o.n_text));
                    startActivity(intent);
                }
            });

            return v;
        }
    }

    public Bitmap getBitmap(String bitmapUrl) {
        try {
            URL url = new URL(bitmapUrl);
            return BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
        }
        catch(Exception ex) {return null;}
    }
}
4

1 に答える 1

0

OK、非同期関連のコードを投稿しています。お役に立てば幸いです。まず、次のようにクラスを作成します。

package com.example.pre;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;




import android.util.Log;

public class JSONFunctions {

    public String CreateCon(String url){
        String res="";
        try{
            URL u=new URL(url);
            HttpURLConnection con = (HttpURLConnection) u.
                    openConnection();

                res=readStream(con.getInputStream());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       




        return res;
    }

    private String readStream(InputStream is) {
        // TODO Auto-generated method stub
        String result = "";
        BufferedReader reader=null;
          try{
                reader = new BufferedReader(new InputStreamReader(is));

                String line = null;
                while ((line = reader.readLine()) != null) {
                        result=result+line;
                }
          }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }finally{
            if(reader!=null)
            {
                try {
                    reader.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
}

メインクラスの2番目に、次のメソッドを貼り付けます。

 private class PostTask extends AsyncTask<String, Integer, String>{

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        readJson();
            //progress_dialog.dismiss();
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    }
    @Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
    }
    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        JSONFunctions jsonf=new JSONFunctions();
        str1=jsonf.CreateCon(cat_url);
        return null;
    }
}

ここで、readJsonは機能を定義するメソッドであり、str1はjsonのアドレスを指定する文字列です。PostExecuteクラスの呼び出しを忘れないでください。

于 2012-12-22T06:03:07.403 に答える