任何人都知道如何从异步任务传输数据?

时间:2016-02-24 13:36:48

标签: java android listview android-asynctask adapter

我尝试了越来越多,没有任何工作。最后我使用了sharedPreferences.but那与我无关......请帮我替换sharedPreferences .. 我的MainActivity是

import android.app.ProgressDialog;

import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.CancellationSignal;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;

public class MainActivity extends AppCompatActivity  {
    TextView textView,textView2;
    String[] name=new String[100];
    String[] id=new String[100];
    String[] names=null;
    String[] idg=new String[100];
    String[] ids=null;
    int i;
    int len;
    ArrayList<NewsItem> listData;
    int size;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Fetch().execute();
        SharedPreferences sharedPreferences = getSharedPreferences("local", 0);
        SharedPreferences.Editor editor=sharedPreferences.edit();

        size = sharedPreferences.getInt("array_size", 0);

        ids = new String[size];

        names = new String[size];
        for(i=0; i<size; i++){
            ids[i]=sharedPreferences.getString("array1_" + i, null);
            names[i]=sharedPreferences.getString("array2_" + i, null);
            }
        editor.clear();
        editor.commit();

        listData = getListData();

        final ListView listView = (ListView) findViewById(R.id.custom_list);
        listView.setAdapter(new CustomListAdapter(this, listData));
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                NewsItem newsData = (NewsItem) listView.getItemAtPosition(position);
                Toast.makeText(MainActivity.this, "Selected :" + " " + newsData, Toast.LENGTH_LONG).show();
            }
        });

        //textView=(TextView)findViewById(R.id.textView);
        //textView2=(TextView)findViewById(R.id.textView2);

    }



    class Fetch extends AsyncTask<String,String,Void>{
        private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
        InputStream is = null ;
        String result = "";
        protected void onPreExecute() {
            progressDialog.setMessage("Fetching data...");
            progressDialog.show();
            progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialogInterface) {
                    dialogInterface.cancel();
                }
            });
        }
        @Override
        protected Void doInBackground(String... params) {
            String url_select = "http://andrinfo.comli.com/rimgid.php";
            runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT).show();
                }
            });
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url_select);

            ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();

            try {
                httpPost.setEntity(new UrlEncodedFormEntity(param));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                //read content
                is =  httpEntity.getContent();

            } catch (Exception e) {

                Log.e("log_tag", "Error in http connection "+e.toString());
            }
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                StringBuilder sb = new StringBuilder();
                String line = "";
                while((line=br.readLine())!=null)
                {
                    sb.append(line+"\n");
                }
                is.close();
                result=sb.toString();

            } catch (Exception e) {
                // TODO: handle exception
                Log.e("log_tag", "Error converting result "+e.toString());
            }

            return null;

        }
        protected void onPostExecute(Void v) {

            // ambil data dari Json database
            try {
                JSONArray Jarray = new JSONArray(result);

                len = Jarray.length();
                for(i=0;i<Jarray.length();i++)
                {
                    JSONObject Jasonobject = null;
                    Jasonobject = Jarray.getJSONObject(i);

                    //get an output on the screen

                    id[i] ="http://developer.andrinfo.comli.com/img/"+ Jasonobject.getInt("id")+".jpg";

                    name[i] = Jasonobject.getString("name");
                    SharedPreferences sharedPreferences=getSharedPreferences("local",0);
                    SharedPreferences.Editor editor=sharedPreferences.edit();
                    editor.putInt("array_size", len);
                    for(int i=0;i<len; i++) {
                        editor.putString("array1_" + i, id[i]);
                        editor.putString("array2_" + i, name[i]);
                    }
                    editor.apply();

                        drac d=new drac();
                        //d.exe(id,name,len);
                }
                this.progressDialog.dismiss();

            } catch (Exception e) {
                // TODO: handle exception
                Log.e("log_tag", "Error parsing data "+e.toString());
            }
        }
    }
    private ArrayList<NewsItem> getListData() {


        ArrayList<NewsItem> listMockData = new ArrayList<NewsItem>();

        String[] images = getResources().getStringArray(R.array.images_array);
       String[] headlines = getResources().getStringArray(R.array.headline_array);

        for (i = 0; i < size; i++) {


            NewsItem newsData = new NewsItem();
            newsData.setUrl(ids[i]);
            newsData.setHeadline(names[i]);

            newsData.setReporterName("Price");
            newsData.setDate("May 26, 2015, 1:35PM");
            listMockData.add(newsData);
        }
        return listMockData;
    }
    class  drac{
public void exe(String[] ids, String[] idg,int size)
{
    for (i = 0; i < size; i++) {

            Toast.makeText(getApplicationContext(), ""+ids[i], Toast.LENGTH_SHORT).show();

}}}

}

问题出在MainActivity.java

2 个答案:

答案 0 :(得分:0)

http://developer.android.com/intl/es/reference/android/os/AsyncTask.html。特别是结果的部分。

onPostExecute(Result), invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.

答案 1 :(得分:0)

最后我通过使用凌空图书馆解决了感谢您的回复。